Équivalence de type et types interop incorporés

À compter du .NET Framework version 4, le Common Language Runtime prend en charge l'incorporation des informations de type pour les types COM directement dans les assemblys managés, au lieu d'exiger que les assemblys managés obtiennent les informations de type des types COM à partir d'assemblys d'interopérabilité. Étant donné que les informations de type incorporées incluent uniquement les types et membres réellement utilisés par un assembly managé, deux assemblys managés peuvent avoir des vues très différentes du même type COM. Chaque assembly managé a un objet Type différent pour représenter sa vue du type COM. Le Common Language Runtime prend en charge l'équivalence de type entre ces vues différentes pour les interfaces, structures, énumérations et délégués.

L'équivalence de type signifie qu'un objet COM passé d'un assembly managé à un autre peut être casté au type managé approprié dans l'assembly de réception.

RemarqueRemarque

L'équivalence de type et les types interop incorporés simplifient le déploiement des applications et compléments qui utilisent des composants COM, car il n'est pas nécessaire de déployer des assemblys d'interopérabilité avec les applications.Les développeurs de composants COM partagés doivent toujours créer des assemblys PIA (Primary Interop Assembly) s'ils souhaitent que leurs composants soient utilisés par les versions antérieures du .NET Framework.

Équivalence de type

L'équivalence des types COM est prise en charge pour les interfaces, structures, énumérations et délégués. Les types COM sont équivalents si tout des éléments suivants sont vrais :

  • Les types sont deux interfaces, deux structures, deux énumérations ou deux délégués.

  • Les types ont la même identité, comme décrit dans la section suivante.

  • Les deux types prennent en charge l'équivalence de type, comme décrit dans la section Marquage de types COM pour l'équivalence de type.

Identité de type

Deux types sont considérés comme ayant la même identité lorsque leurs portées et identités correspondent, en d'autres termes, s'ils ont chacun l'attribut TypeIdentifierAttribute, et que les deux attributs ont les propriétés Scope et Identifier correspondantes. La comparaison de Scope ne respecte pas la casse.

Si un type ne possède pas l'attribut TypeIdentifierAttribute, ou s'il possède un attribut TypeIdentifierAttribute qui ne spécifie pas de portée et d'identificateur, le type peut quand même être pris en considération pour l'équivalence comme suit :

Marquage de types COM pour l'équivalence de type

Vous pouvez marquer un type comme étant prêt pour l'équivalence de type de deux façons :

  • Appliquez l'attribut TypeIdentifierAttribute au type.

  • Faites du type un type d'importation COM. Une interface est un type d'importation COM si elle possède l'attribut ComImportAttribute. Une interface, une structure, une énumération ou un délégué est un type d'importation COM si l'assembly dans lequel il/elle est défini(e) possède l'attribut ImportedFromTypeLibAttribute.

Voir aussi

Référence

IsEquivalentTo

Concepts

Utilisation de types COM dans du code managé

Importation d'une bibliothèque de types sous la forme d'un assembly