Freigeben über


ClassInterfaceAttribute-Klasse

Gibt den Typ der Klassenschnittstelle an, die für eine für COM verfügbar gemachte Klasse generiert werden soll (sofern eine Schnittstelle erstellt wird).

Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Assembly Or AttributeTargets.Class, Inherited:=False)> _
Public NotInheritable Class ClassInterfaceAttribute
    Inherits Attribute
'Usage
Dim instance As ClassInterfaceAttribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false)] 
public sealed class ClassInterfaceAttribute : Attribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets::Assembly|AttributeTargets::Class, Inherited=false)] 
public ref class ClassInterfaceAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false) */ 
public final class ClassInterfaceAttribute extends Attribute
ComVisibleAttribute(true) 
AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false) 
public final class ClassInterfaceAttribute extends Attribute

Hinweise

Dieses Attribut kann auf Assemblys oder Klassen angewendet werden.

Dieses Attribut steuert, ob das Type Library Exporter-Tool (Tlbexp.exe) automatisch eine Klassenschnittstelle für die attributierte Klasse generiert. Eine Klassenschnittstelle hat denselben Namen wie die Klasse selbst, der Name weist jedoch einen Unterstrich als Präfix auf. Wenn sie verfügbar gemacht wird, enthält die Klassenschnittstelle alle public, nicht static Member der verwalteten Klasse, einschließlich der von der zugehörigen Basisklasse vererbten Member. Verwaltete Klassen können nicht auf eine Klassenschnittstelle zugreifen. Dies ist jedoch nicht erforderlich, da sie direkt auf die Klassenmember zugreifen können. Tlbexp.exe generiert einen eindeutigen Schnittstellenbezeichner (Interface Identifier, IID) für die Klassenschnittstelle.

Klassenschnittstellen können duale oder auf Dispatch beschränkte Schnittstellen sein. Sie haben die Möglichkeit, das Generieren der Klassenschnittstelle zu unterdrücken und stattdessen eine benutzerdefinierte Schnittstelle zu erstellen. Sie machen eine Klassenschnittstelle verfügbar bzw. unterdrücken sie, indem Sie einen System.Runtime.InteropServices.ClassInterfaceType-Enumerationsmember angeben. Wenn Sie ClassInterfaceAttribute auf eine Assembly anwenden, bezieht sich das Attribut auf alle Klassen in der Assembly, es sei denn, einzelne Klassen überschreiben die Einstellung durch eigene Attribute.

Obwohl mit Klassenschnittstellen die Aufgabe des expliziten Definierens von Schnittstellen für alle Klassen entfällt, wird von ihrer Verwendung in Produktionsanwendungen dringen abgeraten. Duale Klassenschnittstellen ermöglichen Clients das Binden an ein bestimmtes Schnittstellenlayout, das bei der Entwicklung der Klasse Änderungen unterworfen ist. Betrachten Sie als Beispiel eine verwaltete Klasse, die eine Klassenschnittstelle für COM-Clients verfügbar macht. Die erste Version der Klasse enthält die Methoden North und South. Ein nicht verwalteter Client kann an die Klassenschnittstelle gebunden werden, wobei North als erste Methode in der Klassenschnittstelle und Methode South als zweite Methode bereitgestellt werden. Betrachten Sie nun die nächste Version der Klasse, bei der die neue Methode East zwischen den Methoden North und South eingefügt wurde. Nicht verwaltete Clients, die versuchen, über die alte Klassenschnittstelle eine Bindung an die neue Klasse herzustellen, rufen die Methode East anstelle von Methode South auf, da sich die Position der Methoden innerhalb der Schnittstelle geändert hat. Darüber hinaus haben Änderungen am Layout einer Basisklasse auch Auswirkungen auf das Layout der Klassenschnittstelle für alle abgeleiteten Klassen. Diese Versionsprobleme treten bei verwalteten Clients mit direkter Bindung an Klassen nicht auf. Spezielle Richtlinien zur Verwendung einer Klassenschnittstelle finden Sie unter Einführung in die Klassenschnittstelle.

Type Library Importer-Tool (Tlbimp.exe) wendet auf importierte Klassen immer den ClassInterfaceType.None-Enumerationsmember an, um anzugeben, dass vorhandene COM-Klassen nie verwaltete Schnittstellen verfügbar machen.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie ClassInterfaceAttribute mit dem ClassInterfaceType-Wert AutoDispatch angewendet wird, wodurch eine IDispatch-Schnittstelle für MyClass generiert wird.

Imports System.Runtime.InteropServices

<ClassInterface(ClassInterfaceType.AutoDispatch)> _
Public Class SampleClass    
    ' Insert class members here.
End Class
using System.Runtime.InteropServices;

[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class MyClass
{
   public MyClass() {}
}
using namespace System::Runtime::InteropServices;

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

};
import System.Runtime.InteropServices.*;

/** @attribute ClassInterface(ClassInterfaceType.AutoDispatch)
 */
public class MyClass
{
    public MyClass()
    {
    } //MyClass
} //MyClass 

Vererbungshierarchie

System.Object
   System.Attribute
    System.Runtime.InteropServices.ClassInterfaceAttribute

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

ClassInterfaceAttribute-Member
System.Runtime.InteropServices-Namespace
ClassInterfaceType

Weitere Ressourcen

Type Library Exporter-Tool (Tlbexp.exe)
Type Library Importer-Tool (Tlbimp.exe)