ClassInterfaceType Enumeration

Definition

Gibt den Typ der Klassenschnittstelle an, die für eine Klasse generiert wird.

public enum class ClassInterfaceType
public enum ClassInterfaceType
[System.Serializable]
public enum ClassInterfaceType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ClassInterfaceType
type ClassInterfaceType = 
[<System.Serializable>]
type ClassInterfaceType = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ClassInterfaceType = 
Public Enum ClassInterfaceType
Vererbung
ClassInterfaceType
Attribute

Felder

Name Wert Beschreibung
None 0

Gibt an, dass für die Klasse keine Klassenschnittstelle generiert wird. Wenn keine Schnittstellen explizit implementiert werden, kann die Klasse nur spät gebundenen Zugriff über die IDispatch Schnittstelle bereitstellen. Dies ist die empfohlene Einstellung für ClassInterfaceAttribute. Die Verwendung ClassInterfaceType.None ist die einzige Möglichkeit, Funktionen über Schnittstellen verfügbar zu machen, die explizit von der Klasse implementiert werden.

Tlbexp.exe (Type Library Exporter) macht die erste öffentliche, COM-sichtbare Schnittstelle verfügbar, die von der Klasse als Standardschnittstelle der Coclass implementiert wird. In .NET Framework 2.0 und höheren Versionen können Sie die Standardschnittstelle angeben, die com verfügbar gemacht wird, indem Sie das Attribut ComDefaultInterfaceAttribute verwenden. Wenn die Klasse keine Schnittstellen implementiert, wird die erste öffentliche, durch eine Basisklasse implementierte COM-sichtbare Schnittstelle zur Standardschnittstelle (beginnend mit der zuletzt abgeleiteten Basisklasse und der Rückwärtsarbeit). Tlbexp.exe wird als Standardschnittstelle verfügbar gemacht _Object , wenn weder die Klasse noch ihre Basisklassen Schnittstellen implementieren.

AutoDispatch 1

Gibt an, dass die Klasse nur späte Bindung für COM-Clients unterstützt. A dispinterface für die Klasse wird automatisch für COM-Clients auf Anforderung verfügbar gemacht. Die von Tlbexp.exe (Type Library Exporter) erstellte Typbibliothek enthält keine Typinformationen für die dispinterface , um zu verhindern, dass Clients die DISPIDs der Schnittstelle zwischenspeichern. Die dispinterface Versionsverwaltungsprobleme ClassInterfaceAttribute werden nicht angezeigt, da Clients nur spät an die Schnittstelle gebunden werden können.

Dies ist die Standardeinstellung für ClassInterfaceAttribute.

AutoDual 2

Gibt an, dass automatisch eine duale Klassenschnittstelle für die Klasse generiert und com verfügbar gemacht wird. Typinformationen werden für die Klassenschnittstelle erstellt und in der Typbibliothek veröffentlicht. Die Verwendung AutoDual wird aufgrund der in ClassInterfaceAttributediesem Abschnitt beschriebenen Versionsverwaltungseinschränkungen dringend abgeraten.

Beispiele

In diesem Beispiel wird gezeigt, wie Sie den ClassInterfaceAttribute Typ anwenden, indem Sie die Einstellung des Typs ClassInterfaceTypefestlegen. Auf diese Weise definierte Klassen können von nicht verwalteter COM verwendet werden.

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.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

Hinweise

Diese Aufzählung wird in Verbindung mit dem ClassInterfaceAttribute Attribut verwendet.

Gilt für:

Weitere Informationen