Freigeben über


Typengleichheit und eingebettete Interoperabilitätstypen

Ab .NET Framework 4 unterstützt die Common Language Runtime das Einbetten von Typinformationen für COM-Typen direkt in verwaltete Assemblys, anstatt dass die verwalteten Assemblys Typinformationen für COM-Typen aus Interopassemblys abrufen müssen. Da die eingebetteten Typinformationen nur die Typen und Member enthalten, die tatsächlich von einer verwalteten Assembly verwendet werden, verfügen zwei verwaltete Assemblys möglicherweise über sehr unterschiedliche Ansichten desselben COM-Typs. Jedes verwaltete Assembly hat ein anderes Type Objekt, um seine Ansicht des COM-Typs zu repräsentieren. Die Common Language Runtime unterstützt die Typgleichheit zwischen diesen verschiedenen Ansichten für Schnittstellen, Strukturen, Enumerationen und Delegaten.

Typgleichheit bedeutet, dass ein COM-Objekt, das von einer verwalteten Assembly an eine andere übergeben wird, in den entsprechenden verwalteten Typ in der empfangenden Assembly umgewandelt werden kann.

Hinweis

Typgleichheits- und eingebettete Interoperabilitätstypen vereinfachen die Bereitstellung von Anwendungen und Add-Ins, die COM-Komponenten verwenden, da es nicht erforderlich ist, Interopassemblys mit den Anwendungen bereitzustellen. Entwickler freigegebener COM-Komponenten müssen weiterhin primäre Interopassemblys (PIAs) erstellen, wenn sie möchten, dass ihre Komponenten von früheren Versionen von .NET Framework verwendet werden.

Typäquivalenz

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

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

  • Die Typen weisen die gleiche Identität auf, wie im nächsten Abschnitt beschrieben.

  • Beide Typen sind für die Typäquivalenz geeignet, wie im Abschnitt zur Kennzeichnung von COM-Typen für die Typäquivalenz beschrieben.

Typidentität

Zwei Typen gelten als identisch, wenn sich ihre Bereiche und Identitäten decken, das heißt, wenn sie jeweils das TypeIdentifierAttribute Attribut haben und die beiden Attribute die Eigenschaften Scope und Identifier gemeinsam haben. Beim Vergleich für Scope wird die Groß- und Kleinschreibung nicht berücksichtigt.

Wenn ein Typ nicht über das TypeIdentifierAttribute Attribut verfügt oder ein Attribut besitzt TypeIdentifierAttribute , das keinen Bereich und Bezeichner angibt, kann der Typ weiterhin für Äquivalenz wie folgt betrachtet werden:

Markieren von COM-Typen für Typäquivalenz

Sie können einen Typ auf zwei Arten als gleichwertig kennzeichnen:

  • Wenden Sie das TypeIdentifierAttribute Attribut auf den Typ an.

  • Geben Sie den Typ als COM-Importtyp ein. Eine Schnittstelle ist ein COM-Importtyp, wenn sie über das ComImportAttribute Attribut verfügt. Eine Schnittstelle, Struktur, Enumeration oder Stellvertretung ist ein COM-Importtyp, wenn die Assembly, in der sie definiert ist, über das ImportedFromTypeLibAttribute Attribut verfügt.

Siehe auch