從 .NET Framework 4 開始,公共語言運行時支持將 COM 類型的類型信息直接嵌入到託管程序集中,而不要求託管程序集從互操做程序集中獲取 COM 類型的類型信息。 因爲嵌入式類型信息僅包含託管程序集實際使用的類型和成員,所以兩個託管程序集可能具備相同 COM 類型的不一樣視圖。 每一個託管程序集都有不一樣的 Type 對象來表示其 COM 類型視圖。公共語言運行時支持接口、結構、枚舉和委託等不一樣視圖之間的類型等效性。html
類型等效性意味着從一個託管程序集傳遞到另外一個託管程序集的 COM 對象能夠轉換爲接收程序集中適當的託管類型。api
類型等效性和嵌入式互操做類型簡化了使用 COM 組件的應用程序和加載項的部署,由於無需與應用程序一塊兒部署互操做程序集。 若是共享 COM 組件的開發人員但願較早版本的 .NET Framework 使用其組件,他們仍須建立主互操做程序集 (PIA)。ide
COM 類型的等效性支持接口、結構、枚舉和委託。 若是知足如下全部條件,則 COM 類型符合等效條件:ui
類型是兩個接口、兩個結構、兩個枚舉或兩個委託。spa
類型具備相同標識,以下節所述。htm
兩種類型都符合類型等效性,如針對類型等效性標記 COM 類型部分所述。對象
範圍和標識匹配時,肯定兩種類型具備相同標識,換句話說,若是它們各自具備 TypeIdentifierAttribute 屬性,而且兩個屬性都具備匹配的 Scope 和 Identifier 屬性。 Scope的比較不區分大小寫。blog
若是一個類型不具備 TypeIdentifierAttribute 屬性,或者若是它有一個不指定範圍和標識符的 TypeIdentifierAttribute 屬性,仍可將該類型視爲等效性,以下所示:接口
對於接口,使用 GuidAttribute 的值而不使用 TypeIdentifierAttribute.Scope 屬性,使用 Type.FullName 屬性(即類型名稱,包括命名空間),而不使用 TypeIdentifierAttribute.Identifier 屬性。開發
對於結構、枚舉和委託,使用包含程序集的 GuidAttribute 而不使用 Scope 屬性,使用 Type.FullName 屬性而不使用 Identifier 屬性。
可經過兩種方式將類型標記爲符合類型等效性:
將 TypeIdentifierAttribute 屬性應用於該類型。
將該類型設爲 COM 導入類型。 若接口有 ComImportAttribute 屬性,則它是 COM 導入類型。 若是定義了其程序集具備 ImportedFromTypeLibAttribute 屬性,則接口、結構、枚舉或委託是 COM 導入類型。