型の等価性と埋め込まれた相互運用機能型

.NET Framework 4 以降、共通言語ランタイムでは、マネージド アセンブリに COM 型の型情報を直接埋め込めるようになりました。マネージド アセンブリで相互運用アセンブリから COM 型の型情報を取得する必要がありません。 埋め込まれる型情報にはマネージド アセンブリに実際に使用される型とメンバーのみが含まれるため、2 つのマネージド アセンブリで同じ COM 型の表示が非常に異なることが考えられます。 マネージド アセンブリごとに、COM 型の表示を表す異なる Type オブジェクトが与えられます。 共通言語ランタイムでは、インターフェイス、構造、列挙、委任といった異なる表示間で型の等価性が与えられます。

型の等価性とは、マネージド アセンブリ間で渡される COM オブジェクトを受け取り側のアセンブリで適切なマネージド型に変換できることを意味します。

Note

型の等価性と埋め込まれた相互運用機能型により、COM コンポーネントを利用するアプリケーションとアドインの展開が簡単になります。アプリケーションで相互運用アセンブリを展開する必要がないためです。 ただし、以前のバージョンの .NET Framework でコンポーネントを利用する場合、共有 COM コンポーネントの開発者はプライマリ相互運用アセンブリ (PIA) を作成する必要があります。

型の等価性

COM 型の等価性は、インターフェイス、構造、列挙、委任でサポートされています。 COM 型は、次のすべてに該当する場合に等価となります。

  • 型がいずれもインターフェイスであるか、いずれも構造であるか、いずれも列挙であるか、いずれも委任である。

  • 型の ID が同じである (次のセクションに詳細あり)。

  • いずれの型も、型の等価性に適合する (「型の等価性の資格ありとして COM 型を設定する」セクションに詳細あり)。

型の ID

範囲と ID が一致するとき、言い換えると、それぞれに TypeIdentifierAttribute 属性が含まれ、2 つの属性の Scope プロパティと Identifier プロパティが一致する場合、2 つの型の ID が同じであると判断されます。 Scope の比較では、大文字と小文字が区別されません。

型に TypeIdentifierAttribute 属性が含まれない場合、あるいは範囲や識別子を指定しない TypeIdentifierAttribute 属性が型に含まれる場合も、型は次のように等価性適用として考慮されます。

型の等価性に適合するものとして COM 型を設定する

型の等価性に適合するものとして 2 つの方法で型を設定できます。

  • 型に TypeIdentifierAttribute 属性を適用します。

  • 型を COM インポート型にします。 ComImportAttribute 属性が与えられていると、インターフェイスは COM インポート型となります。 それが定義されているアセンブリに ImportedFromTypeLibAttribute 属性が含まれる場合、インターフェイス、構造、列挙、委任は COM インポート型となります。

関連項目