Поделиться через


Эквивалентность типов и встраиваемые типы интероперабельности

Начиная с .NET Framework 4, общеязыковая среда исполнения поддерживает внедрение сведений о типах COM непосредственно в управляемые сборки, а не требует получения сведений о типах COM из сборок взаимодействия. Так как сведения о внедренном типе включают только типы и элементы, которые фактически используются управляемой сборкой, две управляемые сборки могут иметь очень разные представления одного и того же типа COM. Каждая управляемая сборка имеет свой собственный объект Type для представления ее представления типа COM. Общая среда выполнения поддерживает эквивалентность типов между этими различными представлениями интерфейсов, структур, перечислений и делегатов.

Эквивалентность типов означает, что com-объект, передаваемый из одной управляемой сборки в другую, можно привести к соответствующему управляемому типу в принимающей сборке.

Замечание

Эквивалентность типов и внедренные типы взаимодействия упрощают развертывание приложений и надстроек, использующих com-компоненты, так как не требуется развертывать сборки взаимодействия с приложениями. Разработчики общих COM-компонентов по-прежнему должны создавать первичные сборки взаимодействия (PIAs), если они хотят, чтобы их компоненты использовались более ранними версиями .NET Framework.

Эквивалентность типов

Эквивалентность типов COM поддерживается для интерфейсов, структур, перечислений и делегатов. Типы COM считаются эквивалентными, если все следующие условия истинны:

  • Эти типы представляют собой либо оба интерфейса, либо обе структуры, либо оба перечисления, либо оба делегата.

  • Типы обладают тем же тождеством, как описано в следующем разделе.

  • Оба типа могут быть эквивалентны, как описано в разделе Маркировка типов COM для эквивалентности типов.

Идентификация типа

Два типа имеют одинаковую идентичность, если их области и идентичности совпадают, то есть если они имеют атрибут TypeIdentifierAttribute, а оба атрибута содержат совпадающие свойства Scope и Identifier. Сравнение для Scope выполняется без учета регистра.

Если у типа нет TypeIdentifierAttribute атрибута или имеется TypeIdentifierAttribute атрибут, который не указывает область и идентификатор, тип по-прежнему можно рассматривать для эквивалентности следующим образом:

Маркировка типов COM для эквивалентности типов

Тип можно пометить как подходящий для эквивалентности типов двумя способами:

  • Примените TypeIdentifierAttribute атрибут к типу.

  • Введите тип импорта COM. Интерфейс является типом импорта COM, если имеет атрибут, обозначенный как ComImportAttribute. Интерфейс, структура, перечисление или делегат — это тип импорта COM, если сборка, в которой она определена, имеет ImportedFromTypeLibAttribute атрибут.

См. также