ClassInterfaceAttribute Klasse

Definition

Gibt den Typ der Klassenschnittstelle an, die für eine Klasse generiert werden soll, die com verfügbar gemacht wird, wenn überhaupt eine Schnittstelle generiert wird.

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)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ClassInterfaceAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)>]
type ClassInterfaceAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ClassInterfaceAttribute = class
    inherit Attribute
Public NotInheritable Class ClassInterfaceAttribute
Inherits Attribute
Vererbung
ClassInterfaceAttribute
Attribute

Beispiele

Das folgende Beispiel zeigt, wie der ClassInterfaceAttribute Wert mit dem ClassInterfaceType Wert AutoDispatchangewendet wird, für MyClassden eine IDispatch Schnittstelle generiert wird.

using namespace System::Runtime::InteropServices;

[ClassInterface(ClassInterfaceType::AutoDispatch)]
public ref class MyClass
{
public:
   MyClass(){}

};
using System.Runtime.InteropServices;

[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class MyClass
{
   public MyClass() {}
}
Imports System.Runtime.InteropServices

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

Hinweise

Sie können dieses Attribut auf Assemblys oder Klassen anwenden.

Dieses Attribut steuert, ob der Typbibliotheksexporteur (Tlbexp.exe) automatisch eine Klassenschnittstelle für die Attributklasse generiert. Eine Klassenschnittstelle trägt denselben Namen wie die Klasse selbst, aber der Name wird einem Unterstrich vorangestellt. Wenn die Klassenschnittstelle verfügbar gemacht wird, enthält die Klassenschnittstelle alle public, nicht-Member static der verwalteten Klasse, einschließlich member, die von ihrer Basisklasse geerbt wurden. Verwaltete Klassen können nicht auf eine Klassenschnittstelle zugreifen und müssen nicht darauf zugreifen, da sie direkt auf die Klassenmember zugreifen können. Tlbexp.exe generiert einen eindeutigen Schnittstellenbezeichner (IID) für die Klassenschnittstelle.

Klassenschnittstellen können duale oder nur dispatch-only-Schnittstellen sein. Optional können Sie die Generierung der Klassenschnittstelle unterdrücken und stattdessen eine benutzerdefinierte Schnittstelle bereitstellen. Sie können eine Klassenschnittstelle verfügbar machen oder unterdrücken, indem Sie ein Enumerationselement System.Runtime.InteropServices.ClassInterfaceType angeben. Wenn Sie eine Assembly anwenden ClassInterfaceAttribute , bezieht sich das Attribut auf alle Klassen in der Assembly, es sei denn, die einzelnen Klassen überschreiben die Einstellung mit ihrem eigenen Attribut.

Obwohl Klassenschnittstellen die Aufgabe beseitigen, schnittstellen explizit für jede Klasse zu definieren, wird die Verwendung in Produktionsanwendungen dringend abgeraten. Duale Klassenschnittstellen ermöglichen Clients die Bindung an ein bestimmtes Schnittstellenlayout, das sich ändern kann, während sich die Klasse weiterentwickelt. Betrachten Sie beispielsweise eine verwaltete Klasse, die eine Klassenschnittstelle für COM-Clients verfügbar macht. Die erste Version der Klasse enthält Methoden North und South. Ein nicht verwalteter Client kann eine Bindung an die Klassenschnittstelle ausführen, die als erste Methode in der Klassenschnittstelle und -methode South als zweite Methode bereitstelltNorth. Betrachten Sie nun die nächste Version der Klasse, die eine neue Methode, Easteingefügt zwischen Methoden North und South. Nicht verwaltete Clients, die versuchen, eine Bindung an die neue Klasse über die alte Klassenschnittstelle zu binden, enden auf Aufrufmethode East , wenn sie die Methode Southaufrufen möchten, da sich die Positionierung von Methoden innerhalb der Schnittstelle geändert hat. Darüber hinaus wirkt sich jede Änderung des Layouts einer Basisklasse auch auf das Layout der Klassenschnittstelle für alle abgeleiteten Klassen aus. Verwaltete Clients, die direkt an Klassen gebunden sind, weisen nicht dieselben Versionsverwaltungsprobleme auf. Spezifische Richtlinien zur Verwendung einer Klassenschnittstelle finden Sie unter COM Callable Wrapper.

Der Tlbimp.exe (Type Library Importer) gilt immer für importierte Klassen, die das ClassInterfaceType.None Enumerationsmemmemm angibt, dass vorhandene COM-Klassen niemals verwaltete Schnittstellen verfügbar machen.

Konstruktoren

Name Beschreibung
ClassInterfaceAttribute(ClassInterfaceType)

Initialisiert eine neue Instanz der ClassInterfaceAttribute Klasse mit dem angegebenen ClassInterfaceType Enumerationsmememm.

ClassInterfaceAttribute(Int16)

Initialisiert eine neue Instanz der ClassInterfaceAttribute Klasse mit dem angegebenen ClassInterfaceType Enumerationswert.

Eigenschaften

Name Beschreibung
TypeId

Wenn sie in einer abgeleiteten Klasse implementiert wird, wird ein eindeutiger Bezeichner für diese Attribute.

(Geerbt von Attribute)
Value

Ruft den Wert ab, der ClassInterfaceType beschreibt, welcher Typ der Schnittstelle für die Klasse generiert werden soll.

Methoden

Name Beschreibung
Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diesen instance zurück.

(Geerbt von Attribute)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, gibt an, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

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

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit denen die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Bietet Zugriff auf Eigenschaften und Methoden, die von einem Objekt verfügbar gemacht werden.

(Geerbt von Attribute)

Gilt für:

Weitere Informationen