ClassInterfaceAttribute クラス
アセンブリ: mscorlib (mscorlib.dll 内)
構文
<ComVisibleAttribute(True)> _ <AttributeUsageAttribute(AttributeTargets.Assembly Or AttributeTargets.Class, Inherited:=False)> _ Public NotInheritable Class ClassInterfaceAttribute Inherits Attribute
[ComVisibleAttribute(true)] [AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false)] public sealed class ClassInterfaceAttribute : Attribute
[ComVisibleAttribute(true)] [AttributeUsageAttribute(AttributeTargets::Assembly|AttributeTargets::Class, Inherited=false)] public ref class ClassInterfaceAttribute sealed : public Attribute
この属性は、タイプ ライブラリ エクスポータ (Tlbexp.exe) が属性付きのクラスに対してクラス インターフェイスを自動的に生成するかどうかを制御します。クラス インターフェイスの名前は、クラス自体と同じですが、プリフィックスとしてアンダースコアが付きます。公開されると、クラス インターフェイスには、基本クラスから継承したメンバのほか、マネージ クラスのすべての public メンバと非 static メンバが含まれます。マネージ クラスからクラス インターフェイスにはアクセスできませんが、マネージ クラスの場合はメンバに直接アクセスできるため、その必要はありません。Tlbexp.exe は、クラス インターフェイスに対して一意のインターフェイス ID (IID) を生成します。
クラス インターフェイスには、デュアル インターフェイスとディスパッチ専用インターフェイスがあります。必要があれば、クラス インターフェイスを生成せずに、代わりにカスタム インターフェイスを提供することもできます。クラス インターフェイスを公開するかどうかは、System.Runtime.InteropServices.ClassInterfaceType 列挙体メンバを使用して指定します。ClassInterfaceAttribute をアセンブリに適用した場合、個々のクラスがそれぞれの属性で設定をオーバーライドしていない限り、この属性はアセンブリ内のすべてのクラスに適用されます。
クラス インターフェイスを使用すると、クラスごとにインターフェイスを明示的に定義する必要がなくなりますが、本運用のアプリケーションでこれを使用することはできる限り避けてください。デュアル クラス インターフェイスは、クライアントが、クラスの変化による影響を受けやすい特定のインターフェイス レイアウトにバインドできるようにします。たとえば、クラス インターフェイスを COM クライアントに公開するマネージ クラスについて考えてみます。最初のバージョンのクラスは、North メソッドと South メソッドを含んでいます。アンマネージ クライアントは、1 番目のメソッドとして North、2 番目のメソッドとして South を提供するクラス インターフェイスにバインドできます。次に、メソッド North と South の間に新しい East メソッドを挿入した、同じクラスの次のバージョンについて考えます。アンマネージ クライアントが以前のクラス インターフェイスを通じて新しいクラスにバインドしようとした場合は、インターフェイス内のメソッドの位置が変更されてしまっているため、South メソッドを呼び出そうとしたときに、East メソッドが呼び出されてしまうことになります。さらに、基本クラスのレイアウトを変更すると、すべての派生クラスのクラス インターフェイスのレイアウトにも影響があります。クラスに直接バインドするマネージ クライアントでは、このようなバージョン問題が発生しません。クラス インターフェイスの使用に関するガイドラインについては、「クラス インターフェイスの概要」を参照してください。
タイプ ライブラリ インポータ (Tlbimp.exe) は、既存の COM クラスがマネージ インターフェイスを公開することはないことを示すために、ClassInterfaceType.None 列挙体メンバをインポートされたクラスに対して常に適用します。
ClassInterfaceType に AutoDispatch を指定して ClassInterfaceAttribute を適用し、MyClass の IDispatch インターフェイスを生成する例を次に示します。
Imports System.Runtime.InteropServices <ClassInterface(ClassInterfaceType.AutoDispatch)> _ Public Class SampleClass ' Insert class members here. End Class
using System.Runtime.InteropServices; [ClassInterface(ClassInterfaceType.AutoDispatch)] public class MyClass { public MyClass() {} }
System.Attribute
System.Runtime.InteropServices.ClassInterfaceAttribute
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- ClassInterfaceAttribute クラスのページへのリンク