Dela via


Typeekvivalens och inbäddade interoperabilitetstyper

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 gemensamma runtime-miljön stöder typekvivalens mellan dessa olika vyer för gränssnitt, strukturer, uppräkningar och delegeringar.

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.

Anmärkning

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, båda uppräkningarna, eller båda delegaterna.

  • 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 .

Typidentitet

Två typer anses ha samma identitet när deras omfattningar och identiteter matchar; med andra ord, om de båda har TypeIdentifierAttribute-attributet och de två attributen har matchande Scope- och Identifier-egenskaper. Jämförelsen för Scope är inte 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:

Markera COM-typer för typjämlikhet

Du kan markera en typ som berättigad till typjämvikt på två sätt:

Se även