ClassInterfaceType ClassInterfaceType ClassInterfaceType ClassInterfaceType Enum

定義

クラスに対して生成するクラス インターフェイスの型を識別します。Identifies the type of class interface that is generated for a class.

public enum class ClassInterfaceType
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ClassInterfaceType
type ClassInterfaceType = 
Public Enum ClassInterfaceType
継承
ClassInterfaceTypeClassInterfaceTypeClassInterfaceTypeClassInterfaceType
属性

フィールド

AutoDispatch AutoDispatch AutoDispatch AutoDispatch 1

クラスが COM クライアントに対して遅延バインディングだけをサポートすることを示します。Indicates that the class only supports late binding for COM clients. クラスの dispinterface は、要求に応じて自動的に COM クライアントに公開されます。A dispinterface for the class is automatically exposed to COM clients on request. Tlbexp.exe (Type Library Exporter) によって生成されるタイプ ライブラリには、dispinterface の型情報は含まれません。これは、クライアントがこのインターフェイスの DISPID をキャッシュしないようにするためです。The type library produced by Tlbexp.exe (Type Library Exporter) does not contain type information for the dispinterface in order to prevent clients from caching the DISPIDs of the interface. クライアントがこの dispinterface に対して実行できるのは遅延バインディングだけであるため、ClassInterfaceAttribute に示されているバージョン管理の問題は、このインターフェイスでは発生しません。The dispinterface does not exhibit the versioning problems described in ClassInterfaceAttribute because clients can only late-bind to the interface.

これは、ClassInterfaceAttribute の既定の設定です。This is the default setting for ClassInterfaceAttribute.

AutoDual AutoDual AutoDual AutoDual 2

クラスに対してデュアル クラス インターフェイスを自動的に生成し、COM に公開することを示します。Indicates that a dual class interface is automatically generated for the class and exposed to COM. 型情報は、クラス インターフェイスに対して作成され、タイプ ライブラリで公開されます。Type information is produced for the class interface and published in the type library. ClassInterfaceAttribute で説明したようなバージョン管理の制約があるため、AutoDual は使用しないことを強くお勧めします。Using AutoDual is strongly discouraged because of the versioning limitations described in ClassInterfaceAttribute.

None None None None 0

クラスに対してクラス インターフェイスを生成しないことを示します。Indicates that no class interface is generated for the class. インターフェイスを明示的に実装していないクラスには、IDispatch インターフェイスを通じた遅延バインディングによってしかアクセスできません。If no interfaces are implemented explicitly, the class can only provide late-bound access through the IDispatch interface. これは、ClassInterfaceAttribute の推奨値です。This is the recommended setting for ClassInterfaceAttribute. このクラスが明示的に実装しているインターフェイスを通じて機能を公開するには、ClassInterfaceType.None の使用が唯一の方法です。Using ClassInterfaceType.None is the only way to expose functionality through interfaces implemented explicitly by the class.

この例では、適用、ClassInterfaceAttribute種類の設定をClassInterfaceTypeします。This example shows how to apply the ClassInterfaceAttribute to a type, setting the ClassInterfaceType. アンマネージ COM から使用できます。 この方法で定義されたクラスClasses defined this way can be used from unmanaged COM.

using namespace System;
using namespace System::Runtime::InteropServices;

// Have the CLR expose a class interface (derived from IDispatch)
// for this type. COM clients can call the  members of this
// class using the Invoke method from the IDispatch interface.
[ClassInterface(ClassInterfaceType::AutoDispatch)]
public ref class AClassUsableViaCOM
{
public:
    AClassUsableViaCOM() 
    { 
    }

public:
    int Add(int x, int y)
    {
        return x + y;
    }
};

// The CLR does not expose a class interface for this type.
// COM clients can call the members of this class using
// the methods from the IComparable interface.
[ClassInterface(ClassInterfaceType::None)]
public ref class AnotherClassUsableViaCOM : public IComparable
{
public:
    AnotherClassUsableViaCOM() 
    { 
    }

    virtual int CompareTo(Object^ o) = IComparable::CompareTo
    {
        return 0;
    }
};
using System;
using System.Runtime.InteropServices;

// Have the CLR expose a class interface (derived from IDispatch) for this type.
// COM clients can call the  members of this class using the Invoke method from the IDispatch interface.
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class AClassUsableViaCOM
{
    public AClassUsableViaCOM() { }

    public Int32 Add(Int32 x, Int32 y) { return x + y; }
}

// The CLR does not expose a class interface for this type.
// COM clients can call the members of this class using the methods from the IComparable interface.
[ClassInterface(ClassInterfaceType.None)]
public class AnotherClassUsableViaCOM : IComparable
{
    public AnotherClassUsableViaCOM() { }

    Int32 IComparable.CompareTo(Object o) { return 0; }
}
Imports System
Imports System.Runtime.InteropServices


' Have the CLR expose a class interface (derived from IDispatch) for this type.
' COM clients can call the  members of this class using the Invoke method from the IDispatch interface.
<ClassInterface(ClassInterfaceType.AutoDispatch)> _
Public Class AClassUsableViaCOM

    Public Sub New()

    End Sub

    Public Function Add(ByVal x As Int32, ByVal y As Int32) As Int32
        Return x + y

    End Function
End Class
' The CLR does not expose a class interface for this type.
' COM clients can call the members of this class using the methods from the IComparable interface.
<ClassInterface(ClassInterfaceType.None)> _
Public Class AnotherClassUsableViaCOM
    Implements IComparable

    Public Sub New()

    End Sub

    Function CompareTo(ByVal o As [Object]) As Int32 Implements IComparable.CompareTo
        Return 0

    End Function 'IComparable.CompareTo
End Class

注釈

この列挙体と組み合わせて使用、ClassInterfaceAttribute属性。This enumeration is used in conjunction with the ClassInterfaceAttribute attribute.

適用対象

こちらもご覧ください