ClassInterfaceAttribute クラス


インターフェイスが生成される場合、COM に公開されているクラスに対して生成されるクラス インターフェイスの型を指定します。Indicates the type of class interface to be generated for a class exposed to COM, if an interface is generated at all.

public ref class ClassInterfaceAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
public sealed class ClassInterfaceAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
public sealed class ClassInterfaceAttribute : Attribute
type ClassInterfaceAttribute = class
    inherit Attribute
Public NotInheritable Class ClassInterfaceAttribute
Inherits Attribute

次の例では、ClassInterfaceTypeAutoDispatchを使用して ClassInterfaceAttribute を適用する方法を示します。これにより、MyClassIDispatch インターフェイスが生成されます。The following example shows how to apply the ClassInterfaceAttribute with the ClassInterfaceType value AutoDispatch, which generates an IDispatch interface for MyClass.

using namespace System::Runtime::InteropServices;

public ref class MyClass


using System.Runtime.InteropServices;

public class MyClass
   public MyClass() {}
Imports System.Runtime.InteropServices

<ClassInterface(ClassInterfaceType.AutoDispatch)> _
Public Class SampleClass    
    ' Insert class members here.
End Class


この属性は、アセンブリまたはクラスに適用できます。You can apply this attribute to assemblies or classes.

この属性は、タイプライブラリエクスポーター (Tlbexp.exe) が属性付きクラスのクラスインターフェイスを自動的に生成するかどうかを制御します。This attribute controls whether the Type Library Exporter (Tlbexp.exe) automatically generates a class interface for the attributed class. クラスインターフェイスにはクラス自体と同じ名前が付けられますが、名前の先頭にはアンダースコアが付きます。A class interface carries the same name as the class itself, but the name is prefixed with an underscore. クラスインターフェイスを公開すると、その基本クラスから継承されたメンバーを含む、マネージクラスのすべての public、非 static メンバーが含まれます。When exposed, the class interface contains all the public, non- static members of the managed class, including members inherited from its base class. マネージクラスはクラスインターフェイスにアクセスできないため、クラスメンバーに直接アクセスできる必要はありません。Managed classes cannot access a class interface and have no need to as they can access the class members directly. Tlbexp.exe は、クラスインターフェイスの一意のインターフェイス識別子 (IID) を生成します。Tlbexp.exe generates a unique interface identifier (IID) for the class interface.

クラスインターフェイスは、デュアルインターフェイスまたはディスパッチ専用インターフェイスにすることができます。Class interfaces can be dual or dispatch-only interfaces. 必要に応じて、クラスインターフェイスの生成を抑制し、代わりにカスタムインターフェイスを提供できます。Optionally, you can suppress the generation of the class interface and provide a custom interface instead. クラスインターフェイスを公開または非表示にするには、System.Runtime.InteropServices.ClassInterfaceType 列挙型のメンバーを指定します。You expose or suppress a class interface by specifying a System.Runtime.InteropServices.ClassInterfaceType enumeration member. アセンブリに ClassInterfaceAttribute を適用すると、個々のクラスがその設定を独自の属性でオーバーライドしない限り、属性はアセンブリ内のすべてのクラスに関連します。When you apply ClassInterfaceAttribute to an assembly, the attribute pertains to all classes in the assembly unless the individual classes override the setting with their own attribute.

クラスインターフェイスでは、各クラスのインターフェイスを明示的に定義するタスクを排除しますが、実稼働アプリケーションでの使用は推奨されません。Although class interfaces eliminate the task of explicitly defining interfaces for each class, their use in production applications is strongly discouraged. デュアルクラスインターフェイスを使用すると、クライアントは、クラスの進化に伴って変更される可能性のある特定のインターフェイスレイアウトにバインドできます。Dual class interfaces allow clients to bind to a specific interface layout that is subject to change as the class evolves. たとえば、COM クライアントに対してクラスインターフェイスを公開するマネージクラスについて考えてみます。For example, consider a managed class that exposes a class interface to COM clients. クラスの最初のバージョンには North および Southメソッドが含まれています。The first version of the class contains methods North and South. アンマネージクライアントは、クラスインターフェイスにバインドできます。これにより、2番目のメソッドとして、クラスインターフェイスとメソッド South の最初のメソッドとして North が提供されます。An unmanaged client can bind to the class interface, which provides North as the first method in the class interface and method South as the second method. 次のバージョンのクラスについて考えてみましょう。このクラスには、メソッド NorthSouthの間に新しいメソッド Eastが挿入されています。Now consider the next version of the class, which has a new method, East, inserted between methods North and South. アンマネージクライアントは、インターフェイス内のメソッドの位置が変更されているため、以前のクラスインターフェイスを使用して新しいクラスにバインドしようとすると、メソッド Southを呼び出す必要がある East ます。Unmanaged clients that try to bind to the new class through the old class interface end up calling method East when they intend to call method South, because the positioning of methods within the interface has changed. さらに、基底クラスのレイアウトを変更すると、すべての派生クラスのクラスインターフェイスのレイアウトにも影響します。Moreover, any change to the layout of a base class also affects the layout of the class interface for all derived classes. マネージクライアントは、クラスに直接バインドされるので、バージョン管理の問題が発生することはありません。Managed clients, which bind directly to classes, do not exhibit the same versioning problems. クラスインターフェイスの使用に関する具体的なガイドラインについては、「 COM 呼び出し可能ラッパー」を参照してください。For specific guidelines on using a class interface, see COM Callable Wrapper.

Tlbimp.exe (タイプライブラリインポーター)は、既存の COM クラスがマネージインターフェイスを公開しないことを示すために、ClassInterfaceType.None 列挙メンバーであるインポートされたクラスに常に適用されます。The Tlbimp.exe (Type Library Importer) always applies to imported classes the ClassInterfaceType.None enumeration member to indicate that existing COM classes never expose managed interfaces.



指定した ClassInterfaceAttribute 列挙体メンバーを使用して、ClassInterfaceType クラスの新しいインスタンスを初期化します。Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration member.


ClassInterfaceAttribute 列挙値を指定して、ClassInterfaceType クラスの新しいインスタンスを初期化します。Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration value.



派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(継承元 Attribute)

クラスに対して生成するインターフェイスの型について説明する ClassInterfaceType 値を取得します。Gets the ClassInterfaceType value that describes which type of interface should be generated for the class.



このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(継承元 Attribute)

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(継承元 Attribute)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(継承元 Attribute)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(継承元 Attribute)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)


_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(継承元 Attribute)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(継承元 Attribute)