Type-gelijkwaardigheid en ingesloten interoperabiliteitstypen
Vanaf .NET Framework 4 ondersteunt de algemene taalruntime het insluiten van typegegevens voor COM-typen rechtstreeks in beheerde assembly's, in plaats van dat de beheerde assembly's typegegevens moeten verkrijgen voor COM-typen uit interopassembly's. Omdat de ingesloten typegegevens alleen de typen en leden bevatten die daadwerkelijk worden gebruikt door een beheerde assembly, kunnen twee beheerde assembly's zeer verschillende weergaven van hetzelfde COM-type hebben. Elke beheerde assembly heeft een ander Type object om de weergave van het COM-type weer te geven. De algemene taalruntime ondersteunt gelijkwaardigheid van typen tussen deze verschillende weergaven voor interfaces, structuren, opsommingen en gemachtigden.
Type-gelijkwaardigheid betekent dat een COM-object dat van de ene beheerde assembly naar een andere wordt doorgegeven, kan worden omgezet in het juiste beheerde type in de ontvangende assembly.
Notitie
Type-equivalentie en ingesloten interoperabiliteitstypen vereenvoudigen de implementatie van toepassingen en invoegtoepassingen die gebruikmaken van COM-onderdelen, omdat het niet nodig is om interop-assembly's met de toepassingen te implementeren. Ontwikkelaars van gedeelde COM-onderdelen moeten nog steeds primaire interopassembly's (PIA's) maken als ze willen dat hun onderdelen worden gebruikt door eerdere versies van .NET Framework.
Gelijkwaardigheid van type
Gelijkwaardigheid van COM-typen wordt ondersteund voor interfaces, structuren, opsommingen en gemachtigden. COM-typen komen in aanmerking als gelijkwaardig als alle volgende waar zijn:
De typen zijn beide interfaces, of beide structuren, of beide opsommingen, of beide gemachtigden.
De typen hebben dezelfde identiteit, zoals beschreven in de volgende sectie.
Beide typen komen in aanmerking voor gelijkwaardigheid van het type, zoals beschreven in de com-markeringstypen voor de gelijkwaardigheidssectie van het type.
Type identiteit
Twee typen worden bepaald om dezelfde identiteit te hebben wanneer hun bereiken en identiteiten overeenkomen, met andere woorden, als ze elk het TypeIdentifierAttribute kenmerk hebben en de twee kenmerken overeenkomen Scope en Identifier eigenschappen hebben. De vergelijking voor Scope hoofdlettergevoelig.
Als een type het kenmerk niet heeft TypeIdentifierAttribute of als het een TypeIdentifierAttribute kenmerk heeft dat geen bereik en id opgeeft, kan het type als volgt worden beschouwd als gelijkwaardigheid:
Voor interfaces wordt de waarde van de GuidAttribute eigenschap gebruikt in plaats van de TypeIdentifierAttribute.Scope eigenschap en wordt de Type.FullName eigenschap (dat wil gezegd de naam van het type, inclusief de naamruimte), gebruikt in plaats van de TypeIdentifierAttribute.Identifier eigenschap.
Voor structuren, opsommingen en gemachtigden wordt het GuidAttribute van de ingesloten assembly gebruikt in plaats van de Scope eigenschap en wordt de Type.FullName eigenschap gebruikt in plaats van de Identifier eigenschap.
COM-typen markeren voor gelijkwaardigheid van typen
U kunt een type op twee manieren markeren als in aanmerking komen voor gelijkwaardigheid van typen:
Pas het TypeIdentifierAttribute kenmerk toe op het type.
Maak van het type een COM-importtype. Een interface is een COM-importtype als deze het ComImportAttribute kenmerk heeft. Een interface, structuur, opsomming of gemachtigde is een COM-importtype als de assembly waarin deze is gedefinieerd, het ImportedFromTypeLibAttribute kenmerk heeft.