Equivalencia de tipos y tipos de interoperabilidad incrustados
A partir de .NET Framework 4, Common Language Runtime admite la incrustación de información de tipos COM directamente en ensamblados administrados, en lugar de exigir a los ensamblados administrados obtener información de tipos COM de ensamblados de interoperabilidad. Dado que la información de tipos incrustada solo incluye los tipos y miembros que realmente usa un ensamblado administrado, dos ensamblados administrados pueden tener vistas muy diferentes del mismo tipo COM. Cada ensamblado administrado tiene un objeto Type diferente para representar su vista del tipo COM. Common Language Runtime admite la equivalencia de tipos entre estas distintas vistas de interfaces, estructuras, enumeraciones y delegados.
La equivalencia de tipos significa que un objeto COM que se pasa de un ensamblado administrado a otro se puede convertir al tipo administrado adecuado en el ensamblado receptor.
Nota
La equivalencia de tipos y los tipos de interoperabilidad incrustados simplifican la implementación de aplicaciones y complementos que usan componentes COM, porque no es necesario implementar ensamblados de interoperabilidad con las aplicaciones. Los desarrolladores de componentes COM compartidos siguen teniendo que crear ensamblados de interoperabilidad primarios (PIA) si quieren que las versiones anteriores de .NET Framework usen sus componentes.
Equivalencia de tipos
Se admite la equivalencia de tipos COM para interfaces, estructuras, enumeraciones y delegados. Los tipos COM se consideran equivalentes si se cumplen todas las condiciones siguientes:
Ambos tipos son interfaces, estructuras, enumeraciones o delegados.
Los tipos tienen la misma identidad, como se explica en la sección siguiente.
Ambos tipos son aptos para la equivalencia de tipos, como se explica en la sección Marcado de tipos COM para la equivalencia de tipos.
Identidad de tipos
Se considera que dos tipos tienen la misma identidad cuando sus ámbitos e identidades coinciden, es decir, si cada uno de ellos tiene el atributo TypeIdentifierAttribute y los dos atributos tienen propiedades Scope y Identifier coincidentes. La comparación de Scope no distingue mayúsculas de minúsculas.
Si un tipo no tiene el atributo TypeIdentifierAttribute, o si tiene un atributo TypeIdentifierAttribute que no especifica ámbito ni identificador, se puede seguir considerando para la equivalencia como se indica a continuación:
En las interfaces se usa el valor de la propiedad GuidAttribute en lugar de TypeIdentifierAttribute.Scope y se emplea la propiedad Type.FullName (es decir, el nombre del tipo, incluido el espacio de nombres) en lugar de la propiedad TypeIdentifierAttribute.Identifier.
En estructuras, enumeraciones y delegados, se usa el elemento GuidAttribute del ensamblado contenedor en lugar de la propiedad Scope y se emplea la propiedad Type.FullName en lugar de la propiedad Identifier.
Marcado de tipos COM para la equivalencia de tipos
Puede marcar un tipo como apto para la equivalencia de tipos de dos maneras:
Aplique el atributo TypeIdentifierAttribute al tipo.
Convierta el tipo en un tipo de importación de COM. Una interfaz es un tipo de importación de COM si tiene el atributo ComImportAttribute. Una interfaz, una estructura, una enumeración o un delegado es un tipo de importación de COM si el ensamblado en el que se define tiene el atributo ImportedFromTypeLibAttribute.