Typäquivalenz und eingebettete Interop-TypenType equivalence and embedded interop types

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.Beginning with the .NET Framework 4, the common language runtime supports embedding type information for COM types directly into managed assemblies, instead of requiring the managed assemblies to obtain type information for COM types from interop assemblies. 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.Because the embedded type information includes only the types and members that are actually used by a managed assembly, two managed assemblies might have very different views of the same COM type. Jede verwaltete Assembly besitzt ein anderes Type-Objekt, das eine Ansicht des COM-Typs darstellt.Each managed assembly has a different Type object to represent its view of the COM type. Die Common Language Runtime unterstützt Typäquivalenz zwischen diesen unterschiedlichen Ansichten für Schnittstellen, Strukturen, Enumerationen und Delegaten.The common language runtime supports type equivalence between these different views for interfaces, structures, enumerations, and delegates.

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.Type equivalence means that a COM object that is passed from one managed assembly to another can be cast to the appropriate managed type in the receiving assembly.

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.Type equivalence and embedded interop types simplify the deployment of applications and add-ins that use COM components, because it is not necessary to deploy interop assemblies with the applications. 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.Developers of shared COM components still have to create primary interop assemblies (PIAs) if they want their components to be used by earlier versions of the .NET Framework.

TypäquivalenzType equivalence

Die Äquivalenz von COM-Typen wird für Schnittstellen, Strukturen, Enumerationen und Delegaten unterstützt.Equivalence of COM types is supported for interfaces, structures, enumerations, and delegates. COM-Typen gelten als äquivalent, wenn alle folgenden Bedingungen erfüllt sind:COM types qualify as equivalent if all of the following are true:

  • Beide Typen sind sowohl Schnittstellen, Strukturen, Enumerationen oder Delegaten.The types are both interfaces, or both structures, or both enumerations, or both delegates.

  • Beide Typen haben die gleiche Identität, wie im nächsten Abschnitt beschrieben wird.The types have the same identity, as described in the next section.

  • Beide Typen sind für die Typäquivalenz berechtigt, wie im Abschnitt Markieren von COM-Typen für Typäquivalenz beschrieben wird.Both types are eligible for type equivalence, as described in the Marking COM types for type equivalence section.

TypidentitätType identity

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.Two types are determined to have the same identity when their scopes and identities match, in other words, if they each have the TypeIdentifierAttribute attribute, and the two attributes have matching Scope and Identifier properties. Beim Vergleich für Scope wird die Groß- und Kleinschreibung nicht berücksichtigt.The comparison for Scope is case-insensitive.

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:If a type does not have the TypeIdentifierAttribute attribute, or if it has a TypeIdentifierAttribute attribute that does not specify scope and identifier, the type can still be considered for equivalence as follows:

Markieren von COM-Typen für TypäquivalenzMarking COM types for type equivalence

Sie können einen Typ auf zwei Arten für Typäquivalenz verfügbar kennzeichnen:You can mark a type as eligible for type equivalence in two ways:

  • Fügen Sie das TypeIdentifierAttribute-Attribut zum Typ hinzu.Apply the TypeIdentifierAttribute attribute to the type.

  • Machen Sie den Typ zu einem COM-Importtyp.Make the type a COM import type. Eine Schnittstelle ist eine COM-Importtyp, wenn es über das ComImportAttribute-Attribut verfügt.An interface is a COM import type if it has the ComImportAttribute attribute. 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.An interface, structure, enumeration, or delegate is a COM import type if the assembly in which it is defined has the ImportedFromTypeLibAttribute attribute.

Siehe auchSee also