Equivalência de tipo e tipos de interoperabilidade inseridos

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 inseridos 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 PIAs (assemblies de interoperabilidade primários) se desejam que seus componentes sejam usados por versões anteriores do .NET Framework.

Equivalência de tipo

Há suporte à equivalência de tipos COM em interfaces, estruturas, enumerações e representantes. Os tipos COM se qualificarão como equivalentes se todas as seguintes afirmações forem verdadeiras:

  • 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 elegíveis para equivalência de tipo, conforme descrito na seção Marcando tipos COM para a equivalência de tipo.

Tipo de identidade

Dois tipos são determinados como tendo a mesma identidade quando seus escopos e identidades correspondem. Em outras palavras, se cada um tem o atributo TypeIdentifierAttribute e os dois atributos têm 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 atributo TypeIdentifierAttribute ou se ele tiver um atributo TypeIdentifierAttribute que não especifica 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

É possível marcar um tipo como qualificado para a equivalência de tipo de duas maneiras:

  • Aplicar o atributo TypeIdentifierAttribute ao tipo.

  • Tornar o tipo um tipo de importação COM. Uma interface é um tipo de importação COM se ela tem o atributo ComImportAttribute. 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.

Confira também