Compartilhar via


Equivalência de tipos e tipos de interoperabilidade incorporados

A partir do .NET Framework 4, o Common Language Runtime dá suporte à inserção de informações de tipo de COM diretamente em assemblies gerenciados, em vez de exigir que estes obtenham informações de tipo de COM a partir de assemblies de interoperabilidade. Como as informações de tipo inserido incluem somente os tipos e os 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 Type diferente para representar sua exibição do tipo COM. O Common Language Runtime dá suporte à equivalência de tipo entre essas exibições diferentes para interfaces, estruturas, enumerações e representantes.

Equivalência de tipo significa que um objeto COM que é passado de um assembly gerenciado para outro pode ser convertido no tipo gerenciado apropriado no assembly receptor.

Observação

Equivalência de tipo e tipos de interoperabilidade incorporados simplificam a implantação de aplicativos e suplementos que usam componentes COM, pois não é necessário implantar assemblies de interoperabilidade com os aplicativos. Os desenvolvedores de componentes COM compartilhados ainda precisarão criar PIAs (assemblies de interoperabilidade primários) se quiserem que seus componentes sejam usados por versões anteriores do .NET Framework.

Equivalência de tipo

Há suporte para equivalência de tipos COM para interfaces, estruturas, enumerações e delegados. Os tipos COM se qualificam como equivalentes se todos os seguintes forem verdadeiros:

  • Os tipos são ambas interfaces, ambas estruturas, ambas enumerações ou ambas representantes.

  • Os tipos têm a mesma identidade, conforme descrito na próxima seção.

  • Ambos os tipos são qualificados para equivalência de tipo, conforme descrito na seção Marcando tipos COM para equivalência de tipo.

Tipo de identidade

Dois tipos são determinados a ter a mesma identidade quando seus escopos e identidades corresponderem, em outras palavras, se cada um tiver o atributo TypeIdentifierAttribute e se os dois atributos tiverem propriedades Scope e Identifier correspondentes. A comparação de 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 o escopo e o identificador, o tipo ainda poderá ser considerado para equivalência da seguinte maneira:

Marcando tipos COM para a equivalência de tipo

Você pode marcar um tipo como qualificado para equivalência de tipo de duas maneiras:

  • Aplique o TypeIdentifierAttribute atributo ao tipo.

  • Tornar o tipo um tipo de importação COM. Uma interface será um tipo de importação COM se tiver o ComImportAttribute atributo. Uma interface, uma estrutura, uma enumeração ou um representante é um tipo de importação COM se o assembly no qual ele é definido tem o atributo ImportedFromTypeLibAttribute.

Consulte também