COM-объект в базовом классе - доступ через поле или свойство? - PullRequest
0 голосов
/ 18 января 2010

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

спасибо!

1 Ответ

0 голосов
/ 01 апреля 2011

В COM Interop нет ничего, что могло бы отличить второй случай от первого. Не стесняйтесь настроить модификатор доступа для поля на частный.

...