Teilen über


ClassInterfaceType Enumeration

Definition

Identifiziert die Art der Klassenschnittstelle, 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

AutoDispatch 1

Gibt an, dass die Klasse nur spätes Binden für COM-Clients unterstützt. Eine dispinterface für die Klasse wird auf Anforderung automatisch für COM-Clients verfügbar gemacht. Die vom 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. Bei der dispinterface treten keine der in ClassInterfaceAttribute beschriebenen Versionsprobleme auf, da für Clients nur spätes Binden an die Schnittstelle möglich ist.

Das ist die Standardeinstellung für ClassInterfaceAttribute.

AutoDual 2

Gibt an, dass für die Klasse automatisch eine duale Klassenschnittstelle generiert und für COM verfügbar gemacht wird. Für die Klassenschnittstelle werden Typinformationen erstellt und in der Typbibliothek veröffentlicht. Aufgrund der unter ClassInterfaceAttribute beschriebenen Versionseinschränkungen wird von der Verwendung von AutoDual dringend abgeraten.

None 0

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

Tlbexp.exe (Type Library Exporter) macht die erste öffentliche, für COM sichtbare Schnittstelle verfügbar, die von der Klasse als Standardschnittstelle der Co-Klasse implementiert wird. In .NET Framework 2.0 und höher können Sie die für COM verfügbar gemachte Standardschnittstelle mithilfe des Attributs ComDefaultInterfaceAttribute angeben. Wenn die Klasse keine Schnittstellen implementiert, wird die erste öffentliche, für COM sichtbare Schnittstelle, die von der Basisklasse implementiert wird, zur Standardschnittstelle. Hierbei werden die Basisklassen beginnend bei der zuletzt abgeleiteten abwärts verarbeitet. Die Datei „Tlbexp.exe“ macht _Object als Standardschnittstelle verfügbar, wenn weder die Klasse noch die Basisklassen eine Schnittstelle implementieren.

Beispiele

In diesem Beispiel wird gezeigt, wie auf ClassInterfaceAttribute einen Typ angewendet wird, wobei festgelegt wird ClassInterfaceType. Klassen, die auf diese Weise definiert sind, können von nicht verwaltetem 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 Enumeration wird in Verbindung mit dem ClassInterfaceAttribute -Attribut verwendet.

Gilt für:

Weitere Informationen