Típusegyenlítés és beágyazott interop típusok
A 4. .NET-keretrendszer kezdve a közös nyelvi futtatókörnyezet támogatja a COM-típusok típusadatainak beágyazását közvetlenül felügyelt szerelvényekbe, ahelyett, hogy a felügyelt szerelvényeknek le kellene kérnie a COM-típusok típusadatait az interop szerelvényekből. Mivel a beágyazott típusinformációk csak a felügyelt szerelvény által ténylegesen használt típusokat és tagokat tartalmazzák, két felügyelt szerelvénynek nagyon különböző nézetei lehetnek ugyanannak a COM-típusnak. Minden felügyelt szerelvény más Type objektummal rendelkezik, amely a COM-típus nézetét jeleníti meg. A közös nyelvi futtatókörnyezet támogatja a különböző nézetek közötti típusegyenlőséget a felületek, struktúrák, enumerálások és meghatalmazottak esetében.
A típusegyenlítés azt jelenti, hogy az egyik felügyelt szerelvényről egy másikra átadott COM-objektum a fogadó szerelvény megfelelő felügyelt típusára vethető.
Feljegyzés
A típusegyenlítés és a beágyazott interop típusok leegyszerűsítik a COM-összetevőket használó alkalmazások és bővítmények üzembe helyezését, mivel nem szükséges interop szerelvényeket üzembe helyezni az alkalmazásokkal. A megosztott COM-összetevők fejlesztőinek továbbra is elsődleges interop szerelvényeket (PIA-kat) kell létrehozniuk, ha azt szeretnék, hogy az összetevőket a .NET-keretrendszer korábbi verziói használják.
Típusegyenlítés
A COM-típusok egyenértékűsége az interfészek, struktúrák, enumerálások és delegáltak esetében támogatott. A COM-típusok egyenértékűnek minősülnek, ha az alábbiak mindegyike igaz:
A típusok mindkét illesztő, vagy mindkét struktúra, vagy mindkét enumerálás vagy mindkét delegált.
A típusok azonos identitással rendelkeznek a következő szakaszban leírtak szerint.
Mindkét típus jogosult a típusegyenlítésre a TÍPUSegyenlítési szakasz COM-típusok megjelölésével foglalkozó szakaszában leírtak szerint.
Típusidentitás
Két típus azonos identitással rendelkezik, ha a hatókörük és az identitásuk megegyezik, vagyis ha mindegyiknek megvan az TypeIdentifierAttribute attribútuma, és a két attribútumnak egyező Scope és Identifier tulajdonságokkal kell rendelkeznie. Scope A kis- és nagybetűk összehasonlítása érzéketlen.
Ha egy típus nem rendelkezik az TypeIdentifierAttribute attribútummal, vagy olyan attribútummal rendelkezik TypeIdentifierAttribute , amely nem adja meg a hatókört és az azonosítót, a típus továbbra is egyenértékűnek tekinthető az alábbiak szerint:
Interfészek esetén a tulajdonság helyett TypeIdentifierAttribute.Scope a GuidAttribute tulajdonság értékét használja a rendszer, a Type.FullName tulajdonság helyett pedig a tulajdonságot (azaz a típusnevet, beleértve a névteret) használja a TypeIdentifierAttribute.Identifier rendszer.
Struktúrák, enumerálások és delegáltak esetén a tulajdonság helyett az GuidAttribute azt tartalmazó szerelvényt használja a Scope rendszer, a Type.FullName tulajdonság helyett pedig a Identifier tulajdonságot.
COM-típusok megjelölése a típusegyenlítéshez
Egy típust kétféleképpen jelölhet meg típusegyenlítésre jogosultként:
Alkalmazza az TypeIdentifierAttribute attribútumot a típusra.
Com-importálási típussá alakíthatja a típust. Az illesztő COM-importálási típus, ha rendelkezik az ComImportAttribute attribútummal. Az interfész, a struktúra, az enumerálás vagy a delegálás COM-importálási típus, ha a definiált szerelvény rendelkezik az ImportedFromTypeLibAttribute attribútummal.