Нужен ClassInterfaceType.None? - PullRequest
       29

Нужен ClassInterfaceType.None?

2 голосов
/ 17 сентября 2009
  1. Не совсем получено следующее от MSDN :

    ClassInterfaceType.None

    Указывает, что интерфейс класса не создан для класса. Если нет интерфейсы реализованы явно, класс может обеспечить только позднюю привязку доступ через IDispatch интерфейс. Это рекомендуется настройка для ClassInterfaceAttribute. Использование ClassInterfaceType.None является единственный способ раскрыть функциональность через реализованные интерфейсы явно классом.

  2. Является ли [ComVisible(true)] обязательным для видимости COM?

1 Ответ

8 голосов
/ 17 сентября 2009

См. это сообщение в блоге для расширения первой проблемы. Дело в том, что если вы не укажете ClassInterfaceType.None, будет сгенерирован дополнительный интерфейс, и это может вызвать проблемы с двоичной совместимостью, если вы измените порядок методов, измените их сигнатуры или удалите некоторые из них. Гораздо лучшей альтернативой является явное определение интерфейса и наследование от него вашего класса с указанием ClassInterfaceType.None.

ComVisible(true) не обязательно для видимости COM. По умолчанию все открытые методы открытых классов и все открытые классы видимы COM, все остальные объекты не видны COM. Если вам нужно изменить это, вы используете атрибут ComVisible, обычно для уменьшения количества видимых COM-классов, так как для каждого видимого COM-класса создаются записи реестра и записи библиотеки типов, что вызывает ненужное загрязнение реестра и раздувает библиотеку типов. ИМО - это хорошая идея явно пометить все публичные объекты ComVisible.

...