相互運用のための .NET 型の要件

更新 : 2007 年 11 月

アセンブリ内の型を COM アプリケーションに公開する場合は、デザイン時に COM 相互運用機能の要件について検討する必要があります。マネージ型 (クラス、インターフェイス、構造体、列挙型) は、次のガイドラインに従うことで、COM 型とシームレスに統合されます。

  • クラスでは、インターフェイスを明示的に実装する必要があります。

    COM 相互運用機能では、クラスのすべてのメンバと、その基本クラスのメンバを含んだインターフェイスを自動的に生成する機能が提供されますが、インターフェイスを明示的に実装する方がはるかに優れています。自動的に生成されるインターフェイスをクラス インターフェイスと呼びます。ガイドラインについては、「クラス インターフェイスの概要」を参照してください。

    Visual Basic 2005、C#、C++ を使うと、インターフェイス定義言語 (IDL: Interface Definition Language) またはそれに相当する他の言語を使わなくても、インターフェイス定義をコードに組み込むことができます。構文の詳細については、使用する言語のドキュメントを参照してください。

  • マネージ型はパブリックである必要があります。

    アセンブリ内で、登録されたり、タイプ ライブラリにエクスポートされたりするのはパブリック型だけです。そのため、COM から参照できるのはパブリック型だけです。

    マネージ型は他のマネージ コードに対して、COM には公開されない機能を公開します。たとえば、パラメータ化されたコンストラクタ、静的メソッド、定数フィールドは、COM クライアントには公開されません。また、ランタイムは型のデータを入出力双方にマーシャリングするため、データはコピーまたは変換されることがあります。

  • メソッド、プロパティ、フィールド、およびイベントはパブリックである必要があります。

    パブリック型のメンバも、COM から参照できるようにする場合には、パブリックである必要があります。アセンブリ、パブリック型、またはパブリック型のパブリック メンバの参照可能範囲を制限するには、ComVisibleAttribute を適用します。既定では、すべてのパブリック型およびメンバが参照可能です。

  • 型は、COM からアクティブ化されるパブリックな既定のコンストラクタを持つ必要があります。

    パブリックなマネージ型は COM から参照できます。ただし、パブリックな既定のコンストラクタ (引数を持たないコンストラクタ) がない場合、COM クライアントでは型を作成できません。その他のなんらかの方法でアクティブ化された COM クライアントなら、型を使用できます。

  • 型を抽象型にすることはできません。

    COM クライアントでも、.NET クライアントでも、抽象型は生成できません。

マネージ型の継承の階層構造は、COM にエクスポートされると平坦になり、階層がなくなります。マネージ環境とアンマネージ環境では、バージョン管理も異なります。COM に公開される型は、他のマネージ型と同じバージョン管理特性を持ちません。

参照

概念

COM への .NET Framework コンポーネントの公開

クラス インターフェイスの概要

相互運用固有の属性の適用

COM 用のアセンブリのパッケージ化

参照

ComVisibleAttribute