Equivalência de tipos e tipos de interoperabilidade incorporados
A partir do .NET Framework 4, o common language runtime oferece suporte à incorporação de informações de tipo para tipos COM diretamente em assemblies gerenciados, em vez de exigir que os assemblies gerenciados obtenham informações de tipo para tipos COM de assemblies de interoperabilidade. Como as informações de tipo incorporadas incluem apenas os tipos e membros que são realmente usados por um assembly gerenciado, dois assemblies gerenciados podem ter exibições muito diferentes do mesmo tipo COM. Cada assembly gerenciado tem um objeto diferente Type para representar sua exibição do tipo COM. O Common Language Runtime oferece suporte à equivalência de tipo entre essas diferentes exibições para interfaces, estruturas, enumerações e delegados.
Equivalência de tipo significa que um objeto COM que é passado de um assembly gerenciado para outro pode ser convertido para o tipo gerenciado apropriado no assembly de recebimento.
Nota
A equivalência de tipos e os tipos de interoperabilidade incorporados simplificam a implantação de aplicativos e suplementos que usam componentes COM, porque não é necessário implantar assemblies de interoperabilidade com os aplicativos. Os desenvolvedores de componentes COM compartilhados ainda precisam criar assemblies de interoperabilidade primários (PIAs) se quiserem que seus componentes sejam usados por versões anteriores do .NET Framework.
Equivalência de tipo
A equivalência de tipos COM é suportada para interfaces, estruturas, enumerações e delegados. Os tipos COM qualificam-se como equivalentes se todos os itens a seguir forem verdadeiros:
Os tipos são ambas as interfaces, ou ambas as estruturas, ou ambas as enumerações, ou ambos os delegados.
Os tipos têm a mesma identidade, conforme descrito na próxima seção.
Ambos os tipos são elegíveis para equivalência de tipo, conforme descrito na seção Marcação de tipos COM para equivalência de tipo.
Identidade do tipo
Dois tipos são determinados a ter a mesma identidade quando seus escopos e identidades coincidem, em outras palavras, se cada um deles tem o TypeIdentifierAttribute atributo, e os dois atributos têm correspondência Scope e Identifier propriedades. A comparação para Scope não diferencia maiúsculas de minúsculas.
Se um tipo não tiver o TypeIdentifierAttribute atributo, ou se tiver um TypeIdentifierAttribute atributo que não especifique escopo e identificador, o tipo ainda poderá ser considerado para equivalência da seguinte maneira:
Para interfaces, o GuidAttribute valor do é usado em vez da TypeIdentifierAttribute.Scope propriedade, e a Type.FullName propriedade (ou seja, o nome do tipo, incluindo o namespace) é usada em vez da TypeIdentifierAttribute.Identifier propriedade.
Para estruturas, enumerações e delegados, o GuidAttribute do assembly que contém é usado em vez da Scope propriedade, e a Type.FullName propriedade é usada em vez da Identifier propriedade.
Marcação de tipos COM para equivalência de tipo
Você pode marcar um tipo como elegível para equivalência de tipo de duas maneiras:
Aplique o TypeIdentifierAttribute atributo ao tipo.
Torne o tipo um tipo de importação COM. Uma interface é um tipo de importação COM se tiver o ComImportAttribute atributo. Uma interface, estrutura, enumeração ou delegado é um tipo de importação COM se o assembly no qual ele é definido tiver o ImportedFromTypeLibAttribute atributo.