Skriv ekvivalens och inbäddade interop-typer
Från och med .NET Framework 4 stöder den vanliga språkkörningen inbäddningstypinformation för COM-typer direkt i hanterade sammansättningar, i stället för att kräva att de hanterade sammansättningarna hämtar typinformation för COM-typer från interop-sammansättningar. Eftersom informationen om den inbäddade typen endast innehåller de typer och medlemmar som faktiskt används av en hanterad sammansättning kan två hanterade sammansättningar ha mycket olika vyer av samma COM-typ. Varje hanterad sammansättning har ett annat Type objekt som representerar dess vy av COM-typen. Den vanliga språkkörningen stöder typjämförelse mellan dessa olika vyer för gränssnitt, strukturer, uppräkningar och ombud.
Typjämvikt innebär att ett COM-objekt som skickas från en hanterad sammansättning till en annan kan gjutas till lämplig hanterad typ i den mottagande sammansättningen.
Kommentar
Typjämförelse och inbäddade interoptyper förenklar distributionen av program och tillägg som använder COM-komponenter, eftersom det inte är nödvändigt att distribuera interop-sammansättningar med programmen. Utvecklare av delade COM-komponenter måste fortfarande skapa primära interop-sammansättningar (PIA) om de vill att deras komponenter ska användas av tidigare versioner av .NET Framework.
Typjämvikt
Likvärdighet av COM-typer stöds för gränssnitt, strukturer, uppräkningar och ombud. COM-typerna är likvärdiga om alla följande är sanna:
Typerna är båda gränssnitten, båda strukturerna eller båda uppräkningar eller båda ombuden.
Typerna har samma identitet, enligt beskrivningen i nästa avsnitt.
Båda typerna är berättigade till typjämvikt, enligt beskrivningen i avsnittet Märkning av COM-typer för typjämvikt .
Skriv identitet
Två typer är fast beslutna att ha samma identitet när deras omfång och identiteter matchar, med andra ord om de båda har TypeIdentifierAttribute attributet och de två attributen har matchning Scope och Identifier egenskaper. Jämförelsen för Scope är skiftlägeskänslig.
Om en typ inte har TypeIdentifierAttribute attributet, eller om den har ett TypeIdentifierAttribute attribut som inte anger omfång och identifierare, kan typen fortfarande betraktas som likvärdig enligt följande:
För gränssnitt används värdet GuidAttribute för i stället för TypeIdentifierAttribute.Scope egenskapen, och Type.FullName egenskapen (dvs. typnamnet, inklusive namnområdet) används i stället för TypeIdentifierAttribute.Identifier egenskapen.
För strukturer, uppräkningar och ombud GuidAttribute används den innehållande sammansättningen i stället för Scope egenskapen och Type.FullName egenskapen används i stället för egenskapen Identifier .
Markera COM-typer för typjämvikt
Du kan markera en typ som berättigad till typjämvikt på två sätt:
TypeIdentifierAttribute Använd attributet för typen.
Gör typen till en COM-importtyp. Ett gränssnitt är en COM-importtyp om det har attributet ComImportAttribute . Ett gränssnitt, en struktur, en uppräkning eller ett ombud är en COM-importtyp om sammansättningen där den definieras har ImportedFromTypeLibAttribute attributet.