ClassInterfaceAttribute Klasa

Definicja

Wskazuje typ interfejsu klasy, który ma być wygenerowany dla klasy uwidocznionej dla modelu COM, jeśli interfejs jest generowany w ogóle.Indicates the type of class interface to be generated for a class exposed to COM, if an interface is generated at all.

public ref class ClassInterfaceAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ClassInterfaceAttribute : Attribute
type ClassInterfaceAttribute = class
    inherit Attribute
Public NotInheritable Class ClassInterfaceAttribute
Inherits Attribute
Dziedziczenie
ClassInterfaceAttribute
Atrybuty

Przykłady

Poniższy przykład pokazuje, ClassInterfaceAttribute jak zastosować ClassInterfaceType AutoDispatch MyClasswartość z wartością, która generuje interfejsdla.IDispatchThe following example shows how to apply the ClassInterfaceAttribute with the ClassInterfaceType value AutoDispatch, which generates an IDispatch interface for MyClass.

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

Uwagi

Ten atrybut można zastosować do zestawów lub klas.You can apply this attribute to assemblies or classes.

Ten atrybut określa, czy Eksporter biblioteki typów (Tlbexp. exe) automatycznie generuje interfejs klasy dla klasy z atrybutami.This attribute controls whether the Type Library Exporter (Tlbexp.exe) automatically generates a class interface for the attributed class. Interfejs klasy ma taką samą nazwę jak sama klasa, ale nazwa jest poprzedzona znakiem podkreślenia.A class interface carries the same name as the class itself, but the name is prefixed with an underscore. Gdy są uwidocznione, interfejs klasy zawiera wszystkie publicelementy, static które nie są elementami członkowskimi zarządzanej klasy, w tym członków dziedziczonych ze swojej klasy bazowej.When exposed, the class interface contains all the public, non- static members of the managed class, including members inherited from its base class. Klasy zarządzane nie mogą uzyskać dostępu do interfejsu klasy i nie muszą mieć do nich bezpośredniego dostępu do elementów członkowskich klasy.Managed classes cannot access a class interface and have no need to as they can access the class members directly. Tlbexp. exe generuje unikatowy identyfikator interfejsu (IID) dla interfejsu klasy.Tlbexp.exe generates a unique interface identifier (IID) for the class interface.

Interfejsy klasy mogą być tylko interfejsami tylko do wysyłania.Class interfaces can be dual or dispatch-only interfaces. Opcjonalnie można pominąć generowanie interfejsu klasy i zamiast tego podać niestandardowy interfejs.Optionally, you can suppress the generation of the class interface and provide a custom interface instead. Można uwidocznić lub pominąć interfejs klasy, określając System.Runtime.InteropServices.ClassInterfaceType element członkowski wyliczenia.You expose or suppress a class interface by specifying a System.Runtime.InteropServices.ClassInterfaceType enumeration member. Po zastosowaniu ClassInterfaceAttribute do zestawu atrybut odnosi się do wszystkich klas w zestawie, chyba że poszczególne klasy zastąpią ustawienie własnym atrybutem.When you apply ClassInterfaceAttribute to an assembly, the attribute pertains to all classes in the assembly unless the individual classes override the setting with their own attribute.

Mimo że interfejsy klasy eliminują zadania jawnie definiujące interfejsy dla każdej klasy, ich użycie w aplikacjach produkcyjnych jest zdecydowanie odradzane.Although class interfaces eliminate the task of explicitly defining interfaces for each class, their use in production applications is strongly discouraged. Podwójne interfejsy klasy umożliwiają klientom powiązanie z określonym układem interfejsu, który może ulec zmianie w miarę rozwoju klasy.Dual class interfaces allow clients to bind to a specific interface layout that is subject to change as the class evolves. Rozważmy na przykład klasę zarządzaną, która udostępnia interfejs klasy klientom COM.For example, consider a managed class that exposes a class interface to COM clients. Pierwsza wersja klasy zawiera metody North i. SouthThe first version of the class contains methods North and South. Niezarządzany klient może powiązać z interfejsem klasy, który North zapewnia jako pierwszą metodę w interfejsie klasy i metodę South jako drugą metodę.An unmanaged client can bind to the class interface, which provides North as the first method in the class interface and method South as the second method. Teraz Rozważmy następną wersję klasy, która ma nową metodę, Eastwstawioną między metodami North i South.Now consider the next version of the class, which has a new method, East, inserted between methods North and South. Niezarządzani Klienci, którzy próbują powiązać się z nową klasą za pomocą metody East wywołującej stary interfejs klasy, gdy zamierzają wywołać metodę South, ponieważ rozmieszczenie metod w interfejsie uległo zmianie.Unmanaged clients that try to bind to the new class through the old class interface end up calling method East when they intend to call method South, because the positioning of methods within the interface has changed. Ponadto wszelkie zmiany układu klasy bazowej wpływają również na układ interfejsu klasy dla wszystkich klas pochodnych.Moreover, any change to the layout of a base class also affects the layout of the class interface for all derived classes. Klienci zarządzani, którzy połączyli się bezpośrednio z klasami, nie wykazują tych samych problemów z wersją.Managed clients, which bind directly to classes, do not exhibit the same versioning problems. Aby uzyskać szczegółowe wytyczne dotyczące korzystania z interfejsu klasy, zapoznaj się z otoką wywoływaną przez com.For specific guidelines on using a class interface, see COM Callable Wrapper.

Tlbimp. exe (Importer biblioteki typów) zawsze stosuje się do importowanych klas ClassInterfaceType.None element członkowski wyliczenia, aby wskazać, że istniejące klasy com nigdy nie ujawniają zarządzanych interfejsów.The Tlbimp.exe (Type Library Importer) always applies to imported classes the ClassInterfaceType.None enumeration member to indicate that existing COM classes never expose managed interfaces.

Konstruktory

ClassInterfaceAttribute(ClassInterfaceType)

Inicjuje nowe wystąpienie ClassInterfaceAttribute klasy z określonym ClassInterfaceType składowaną wyliczeniem.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration member.

ClassInterfaceAttribute(Int16)

Inicjuje nowe wystąpienie ClassInterfaceAttribute klasy z określoną ClassInterfaceType wartością wyliczenia.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration value.

Właściwości

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Odziedziczone po Attribute)
Value

ClassInterfaceType Pobiera wartość opisującą typ interfejsu, który powinien być wygenerowany dla klasy.Gets the ClassInterfaceType value that describes which type of interface should be generated for the class.

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.Returns a value that indicates whether this instance is equal to a specified object.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca kod skrótu dla tego wystąpienia.Returns the hash code for this instance.

(Odziedziczone po Attribute)
GetType()

Type Pobiera bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
IsDefaultAttribute()

Gdy jest zastępowany w klasie pochodnej, wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Odziedziczone po Attribute)
Match(Object)

Gdy jest zastępowany w klasie pochodnej, zwraca wartość wskazującą, czy to wystąpienie jest zgodne z określonym obiektem.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy skróconą kopię bieżącego Objectelementu.Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg, który reprezentuje bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.Maps a set of names to a corresponding set of dispatch identifiers.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, którego można użyć do uzyskania informacji o typie dla interfejsu.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.Provides access to properties and methods exposed by an object.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też