Typäquivalenz und eingebettete Interop-Typen

Ab .NET Framework 4 unterstützt die Common Language Runtime die Einbettung von Typinformationen für COM-Typen direkt in verwaltete Assemblys. Die verwalteten Assemblys müssen die Typinformationen für COM-Typen nicht aus Interopassemblys abrufen. Da die eingebettete Typinformation nur die Typen und Member enthält, die tatsächlich von einer verwalteten Assembly verwendet werden, können zwei verwaltete Assemblys möglicherweise sehr unterschiedliche Ansichten desselben COM-Typs haben. Jede verwaltete Assembly besitzt ein anderes Type-Objekt, das eine Ansicht des COM-Typs darstellt. Die Common Language Runtime unterstützt Typäquivalenz zwischen diesen unterschiedlichen Ansichten für Schnittstellen, Strukturen, Enumerationen und Delegaten.

Typäquivalenz bedeutet, dass ein COM-Objekt, das von einer verwalteten Assembly an eine andere übergeben wird, für den entsprechenden verwalteten Typ in der empfangenden Assembly bereitgestellt werden kann.

Hinweis

Typäquivalenz und eingebettete Interop-Typen vereinfachen die Bereitstellung von Anwendungen und Add-Ins, die COM-Komponenten verwenden, da Interop-Assemblys nicht mit den Anwendungen bereitgestellt werden müssen. Entwickler von freigegebenen COM-Komponenten müssen noch primäre Interop-Assemblys (PIAs) erstellen, wenn ihre Komponenten von früheren Versionen von .NET Framework verwendet werden sollen.

Typäquivalenz

Die Äquivalenz von COM-Typen wird für Schnittstellen, Strukturen, Enumerationen und Delegaten unterstützt. COM-Typen gelten als äquivalent, wenn alle folgenden Bedingungen erfüllt sind:

  • Beide Typen sind sowohl Schnittstellen, Strukturen, Enumerationen oder Delegaten.

  • Beide Typen haben die gleiche Identität, wie im nächsten Abschnitt beschrieben wird.

  • Beide Typen sind für die Typäquivalenz berechtigt, wie im Abschnitt Markieren von COM-Typen für Typäquivalenz beschrieben wird.

Typidentität

Zwei Typen werden die gleiche Identität haben, wenn ihre Bereiche und Identitäten übereinstimmen, das heißt, wenn sie beide über das TypeIdentifierAttribute-Attribut verfügen, und die zwei Attribute übereinstimmende Scope- und Identifier-Eigenschaften aufweisen. Beim Vergleich für Scope wird die Groß- und Kleinschreibung nicht berücksichtigt.

Wenn ein Typ nicht über das TypeIdentifierAttribute-Attribut, oder über ein TypeIdentifierAttribute-Attribut verfügt, das Bereich und Bezeichner nicht angibt, kann der Typ folgendermaßen weiterhin für die Äquivalenz in Betracht gezogen werden:

Markieren von COM-Typen für Typäquivalenz

Sie können einen Typ auf zwei Arten für Typäquivalenz verfügbar kennzeichnen:

  • Fügen Sie das TypeIdentifierAttribute-Attribut zum Typ hinzu.

  • Machen Sie den Typ zu einem COM-Importtyp. Eine Schnittstelle ist eine COM-Importtyp, wenn es über das ComImportAttribute-Attribut verfügt. Eine Schnittstelle, Struktur, Enumeration oder ein Delegat ist ein COM-Importtyp, wenn die Assembly, in der sie definiert ist, über das ImportedFromTypeLibAttribute-Attribut verfügt.

Siehe auch