Эквивалентность типов и внедренные типы взаимодействияType equivalence and embedded interop types

Начиная с .NET Framework 4, среда CLR поддерживает внедрение сведений о типах COM непосредственно в управляемые сборки и не требует получения управляемыми сборками сведений о типах COM из сборок взаимодействия.Beginning with the .NET Framework 4, the common language runtime supports embedding type information for COM types directly into managed assemblies, instead of requiring the managed assemblies to obtain type information for COM types from interop assemblies. Так как внедренные сведения о типах включают в себя только типы и члены, которые действительно используются в управляемой сборке, в двух управляемых сборках могут быть очень разные представления одного типа COM.Because the embedded type information includes only the types and members that are actually used by a managed assembly, two managed assemblies might have very different views of the same COM type. Все управляемые сборки имеют разные объекты Type для обозначения представления типа COM.Each managed assembly has a different Type object to represent its view of the COM type. Среда CLR поддерживает эквивалентность типов между этими разными представлениями для интерфейсов, структур, перечислений и делегатов.The common language runtime supports type equivalence between these different views for interfaces, structures, enumerations, and delegates.

Эквивалентность типов означает, что COM-объект, передаваемый из одной управляемой сборки в другую, можно привести к соответствующему управляемому типу в принимающей сборке.Type equivalence means that a COM object that is passed from one managed assembly to another can be cast to the appropriate managed type in the receiving assembly.

Примечание

Эквивалентность типов и внедренные типы взаимодействия упрощают развертывание приложений и надстроек, использующих COM-компоненты, так как с приложениями не требуется развертывать сборки взаимодействия.Type equivalence and embedded interop types simplify the deployment of applications and add-ins that use COM components, because it is not necessary to deploy interop assemblies with the applications. Разработчикам общих COM-компонентов по-прежнему нужно создавать основные сборки взаимодействия, если необходимо, чтобы компоненты можно было использовать в более ранних версиях платформы .NET Framework.Developers of shared COM components still have to create primary interop assemblies (PIAs) if they want their components to be used by earlier versions of the .NET Framework.

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

Эквивалентность типов COM поддерживается для интерфейсов, структур, перечислений и делегатов.Equivalence of COM types is supported for interfaces, structures, enumerations, and delegates. Типы COM определяются как эквивалентные, если выполняются указанные ниже условия.COM types qualify as equivalent if all of the following are true:

  • Оба типа относятся либо к интерфейсам, либо к структурам, либо к перечислениям, либо к делегатам.The types are both interfaces, or both structures, or both enumerations, or both delegates.

  • Типы имеют одинаковые удостоверения, как описано в следующем разделе.The types have the same identity, as described in the next section.

  • Оба типа пригодны для использования эквивалентности типов, как описано в разделе об определении типов COM для эквивалентности типов.Both types are eligible for type equivalence, as described in the Marking COM types for type equivalence section.

Удостоверение типаType identity

Два типа считаются имеющими одинаковое удостоверение, когда их области и идентификаторы совпадают, другими словами, если каждый из них имеет атрибут TypeIdentifierAttribute и эти два атрибута имеют одинаковые свойства Scope и Identifier.Two types are determined to have the same identity when their scopes and identities match, in other words, if they each have the TypeIdentifierAttribute attribute, and the two attributes have matching Scope and Identifier properties. Сравнение Scope выполняется с учетом регистра.The comparison for Scope is case-insensitive.

Если у типа нет атрибута TypeIdentifierAttribute или атрибут TypeIdentifierAttribute не определяет область и идентификатор, то определение эквивалентности типа все же возможно:If a type does not have the TypeIdentifierAttribute attribute, or if it has a TypeIdentifierAttribute attribute that does not specify scope and identifier, the type can still be considered for equivalence as follows:

Пометка типов COM для эквивалентности типовMarking COM types for type equivalence

Тип можно пометить как допустимый для эквивалентности типов двумя способами.You can mark a type as eligible for type equivalence in two ways:

  • Примените к типу атрибут TypeIdentifierAttribute.Apply the TypeIdentifierAttribute attribute to the type.

  • Сделайте тип типом импорта COM.Make the type a COM import type. Интерфейс является типом импорта COM, если у него есть атрибут ComImportAttribute.An interface is a COM import type if it has the ComImportAttribute attribute. Интерфейсы, структуры, перечисления или делегаты являются типами импорта COM, если сборка, в которой они заданы, имеет атрибут ImportedFromTypeLibAttribute.An interface, structure, enumeration, or delegate is a COM import type if the assembly in which it is defined has the ImportedFromTypeLibAttribute attribute.

См. такжеSee also