Я унаследовал кодовую базу C # 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-объектов второго базового класса не будет работать? В моем ограниченном тестировании это работает нормально, но вы, ребята, умнее меня.
спасибо!