.NET Framework 4 以降では、共通言語ランタイムは、COM 型の型情報を相互運用アセンブリを介して取得するのではなく、直接マネージド アセンブリに埋め込むことをサポートしています。これにより、マネージド アセンブリが相互運用機能アセンブリから COM 型の型情報を取得する必要がなくなります。 埋め込み型情報には、マネージド アセンブリによって実際に使用される型とメンバーのみが含まれるため、2 つのマネージド アセンブリに同じ COM 型のビューが非常に異なる場合があります。 各マネージド アセンブリには、COM 型のビューを表す異なる Type オブジェクトがあります。 共通言語ランタイムは、インターフェイス、構造体、列挙型、およびデリゲートに対して、これらの異なるビュー間の型の等価性をサポートします。
型の等価性とは、あるマネージド アセンブリから別のマネージド アセンブリに渡される COM オブジェクトを、受信側アセンブリ内の適切なマネージド型にキャストできることを意味します。
注
型の等価性と組み込みの相互運用機能の種類により、COM コンポーネントを使用するアプリケーションとアドインの展開が簡略化されます。これは、アプリケーションとの相互運用機能アセンブリを展開する必要がないためです。 共有 COM コンポーネントの開発者は、以前のバージョンの .NET Framework でコンポーネントを使用する場合は、プライマリ相互運用機能アセンブリ (PIA) を作成する必要があります。
型の等価性
インターフェイス、構造体、列挙型、およびデリゲートでは、COM 型の等価性がサポートされています。 次のすべてが当てはまる場合、COM 型は同等と見なされます。
型は、両方のインターフェイス、または両方の構造体、または両方の列挙体、または両方のデリゲートです。
次のセクションで説明するように、型の ID は同じです。
型の等価性に関する COM 型のマーキングに関するセクションで説明されているように、どちらの 型も型の等価性の 対象となります。
型の同一性
スコープと ID がそれぞれ TypeIdentifierAttribute 属性を持ち、2 つの属性が一致する Scope プロパティと Identifier プロパティを持つ場合、2 つの型は同じ ID を持っていると判断されます。 Scope の比較では、大文字と小文字が区別されません。
型に TypeIdentifierAttribute 属性がない場合、またはスコープと識別子を指定しない TypeIdentifierAttribute 属性がある場合、型は次のように等価であると見なすことができます。
インターフェイスの場合、GuidAttribute プロパティの代わりにTypeIdentifierAttribute.Scopeの値が使用され、Type.FullName プロパティ (つまり、名前空間を含む型名) が、TypeIdentifierAttribute.Identifier プロパティの代わりに使用されます。
構造体、列挙体、およびデリゲートの場合、GuidAttribute プロパティの代わりに、含まれるアセンブリのScopeが使用され、Type.FullName プロパティが Identifier プロパティの代わりに使用されます。
型の等価性に適合するものとして COM 型を設定する
型は、次の 2 つの方法で型の等価性の対象としてマークできます。
TypeIdentifierAttribute属性を型に適用します。
型を COM インポートの種類にします。 インターフェイスに ComImportAttribute 属性がある場合、インターフェイスは COM インポート型です。 インターフェイス、構造体、列挙体、またはデリゲートは、定義されているアセンブリに ImportedFromTypeLibAttribute 属性がある場合、COM インポート型です。
こちらも参照ください
.NET