Уточнение типов .NET для взаимодействия

Если требуется предоставить типы из сборки COM-приложению, в режиме разработки следует учитывать требования COM-взаимодействия. Управляемые типы (класс, интерфейс, структура и перечисление) легко интегрируются с COM-типами, если строго соблюдаются следующие указания:

  • Классы должны реализовать интерфейсы явным образом.

    Хотя COM-взаимодействие обеспечивает механизм автоматического создания интерфейса, содержащего все члены класса и члены базового класса, гораздо лучше предоставить явные интерфейсы. Автоматически созданный интерфейс называется интерфейсом класса. Указания см. в разделе Введение в интерфейс класса.

    Для включения определений интерфейса в код разработчик может использовать Visual Basic 2005, C# и C++ вместо необходимости использовать язык IDL или его эквивалент. Сведения о синтаксисе см. в документации по используемому языку.

  • Управляемые типы должны быть открытыми.

    Регистрируются и экспортируются в библиотеку типов только открытые типы сборки. В результате для COM видимы только открытые типы.

    Управляемые типы предоставляют свои функциональные возможности другому управляемому коду, который не может быть доступен для COM. Например, конструкторы с параметрами, статические методы и поля констант недоступны COM-клиентам. Кроме того, так как среда выполнения выполняет маршалинг данных в тип и из типа, эти данные могут быть скопированы или преобразованы.

  • Методы, свойства, поля и события должны быть открытыми.

    Если члены открытых типов должны быть видимы для COM, они также должны быть открытыми. Видимость сборки, открытого типа или открытых членов открытого типа можно ограничить с помощью атрибута ComVisibleAttribute. По умолчанию все открытые типы и члены являются видимыми.

  • Типы должны иметь открытый конструктор по умолчанию, активируемый из COM.

    Управляемые открытые типы видимы для COM. Однако без открытого конструктора по умолчанию (конструктора без аргументов) COM-клиенты не могут создавать типы. Но COM-клиенты могут использовать тип, если он активирован некоторыми другими средствами.

  • Типы не могут быть абстрактными.

    Ни COM-клиенты, ни клиенты .NET не могут создавать абстрактные типы.

При экспорте в COM иерархия наследований управляемого типа теряется. Отслеживание версий также отличается в управляемой и неуправляемой средах. Типы, предоставляемые COM, не поддерживают такие же возможности отслеживания версий, как другие управляемые типы.

См. также

Ссылки

ComVisibleAttribute

Основные понятия

Предоставление COM-клиентам доступа к компонентам .NET Framework

Введение в интерфейс класса

Применение атрибутов взаимодействия

Упаковка сборки для модели COM