Я унаследовал кодовую базу dll С#, которые вызываются через COM-взаимодействие (по крайней мере, так было описано). Код C# также использует COM-объекты внутри для выполнения основных функций родительского приложения.
Я рефакторинг некоторых нарушений DRY из кода, потому что поиск дубликатов в 100 000 строк кода в 50 или 60 DLL неэффективно. Я столкнулся с использованием COM-объектов в абстрактных базовых классах, которые я хотел бы немного стандартизировать, но я нигде не нашел однозначного утверждения об этом конкретном использовании COM-объектов в C#.
Наш код в настоящее время имеет несколько базовых классов, содержащих COM-объекты, закодированные следующим образом:
public abstract class SomeBaseClass()
{
protected IComObject comObject;
protected virtual void Initialize(IComObject comObject)
{
this.comObject = comObject;
}
protected SomeBaseClass() { }
}
Чтобы предотвратить установку this.comObject в другом, кроме Initialize(), я хотел бы реализовать эти базовые классы следующим образом:
public abstract class SomeBaseClass()
{
private IComObject comObject;
protected IComObject ComObject
{
get { return comObject; }
}
protected virtual void Initialize(IComObject comObject)
{
this.comObject = comObject;
}
protected SomeBaseClass() { }
}
На мой взгляд, второй пример выглядит лучше и дает больше контроля над внутренним comObject.
В настоящее время существующие производные классы (C#) не устанавливают базовый класс comObject напрямую, а используют Initialize(), но ничто не мешает им напрямую назначать базовый класс comObject. Я хочу предотвратить возможную будущую ошибку при назначении comObject вне Initialize().
Есть ли какая-то причина, по которой вторая реализация базового класса для обработки COM-объектов не будет работать? В моем ограниченном тестировании это работает нормально, но вы, ребята, умнее меня.
Спасибо!