Ekvivalence typů a vložené typy vzájemné spolupráce
Počínaje .NET Framework 4 common language runtime podporuje vkládání informací o typu pro typy modelu COM přímo do spravovaných sestavení, namísto vyžadování spravovaných sestavení k získání informací o typu pro typy modelu COM ze sestavení vzájemné spolupráce. Vzhledem k tomu, že vložené informace o typu zahrnují pouze typy a členy, které jsou skutečně používány spravovaným sestavením, mohou mít dvě spravovaná sestavení velmi odlišná zobrazení stejného typu modelu COM. Každé spravované sestavení má jiný Type objekt, který reprezentuje jeho zobrazení typu MODELU COM. Modul CLR (Common Language Runtime) podporuje ekvivalenci typů mezi těmito různými zobrazeními pro rozhraní, struktury, výčty a delegáty.
Ekvivalence typu znamená, že objekt COM, který je předán z jednoho spravovaného sestavení do jiného, lze přetypovat na příslušný spravovaný typ v přijímajícím sestavení.
Poznámka
Ekvivalence typů a vložené typy vzájemné spolupráce zjednodušují nasazení aplikací a doplňků, které používají komponenty modelu COM, protože není nutné nasazovat sestavení vzájemné spolupráce s aplikacemi. Vývojáři sdílených komponent modelu COM stále musí vytvářet primární sestavení vzájemné spolupráce (PIA), pokud chtějí, aby jejich komponenty používaly starší verze .NET Framework.
Ekvivalence typů
Ekvivalence typů modelu COM je podporována pro rozhraní, struktury, výčty a delegáty. Typy modelu COM jsou ekvivalentní, pokud jsou splněny všechny následující podmínky:
Typy jsou obě rozhraní, nebo obě struktury, nebo oba výčty nebo oba delegáty.
Typy mají stejnou identitu, jak je popsáno v další části.
Oba typy jsou způsobilé pro ekvivalenci typů, jak je popsáno v části Označení typů MODELU COM pro ekvivalenci typů.
Identita typu
Dva typy jsou určeny, aby měly stejnou identitu, pokud se shodují jejich obory a identity, jinými slovy, TypeIdentifierAttributeScopeIdentifier pokud mají každý atribut a oba atributy mají odpovídající vlastnosti a . Při porovnání pro se Scope malá a velká písmena nerozlišovat.
Pokud typ nemá TypeIdentifierAttribute atribut nebo má atribut, který nezadá obor a TypeIdentifierAttribute identifikátor, může být typ stále považován za ekvivalenci následujícím způsobem:
Pro rozhraní se GuidAttributeTypeIdentifierAttribute.ScopeType.FullName místo vlastnosti používá hodnota a vlastnost (to znamená název typu, včetně oboru názvů) TypeIdentifierAttribute.Identifier se použije místo vlastnosti .
Pro struktury, výčty a delegáty GuidAttributeScopeType.FullName se místo vlastnosti používá objekt obsahujícího Identifier sestavení a vlastnost se používá místo vlastnosti .
Označení typů modelu COM pro ekvivalenci typů
Typ můžete označit jako způsobilý pro ekvivalenci typu dvěma způsoby:
Použijte atribut TypeIdentifierAttribute na typ.
Napište typ importu modelu COM. Rozhraní je typ importu modelu COM, pokud má ComImportAttribute atribut . Rozhraní, struktura, výčet nebo delegát je typ importu modelu COM, pokud sestavení, ve kterém je definováno, má atribut ImportedFromTypeLibAttribute .