ClassInterfaceAttribute Klasa

Definicja

Wskazuje typ interfejsu klasy, który ma zostać wygenerowany dla klasy uwidocznionej dla modelu COM, jeśli interfejs jest generowany w ogóle.

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
Dziedziczenie
ClassInterfaceAttribute
Atrybuty

Przykłady

W poniższym przykładzie pokazano, jak zastosować ClassInterfaceAttribute element z wartością ClassInterfaceType AutoDispatch, która generuje IDispatch interfejs dla elementu 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.

Ten atrybut określa, czy eksporter biblioteki typów (Tlbexp.exe) automatycznie generuje interfejs klasy dla klasy przypisanej. Interfejs klasy ma taką samą nazwę jak sama klasa, ale nazwa ma prefiks podkreślenia. Po uwidocznieniu interfejs klasy zawiera wszystkie publicelementy , które nie są static członkami klasy zarządzanej, w tym składowe dziedziczone z klasy bazowej. Klasy zarządzane nie mogą uzyskać dostępu do interfejsu klasy i nie muszą uzyskiwać dostępu bezpośrednio do składowych klasy. Tlbexp.exe generuje unikatowy identyfikator interfejsu (IID) dla interfejsu klasy.

Interfejsy klas mogą być interfejsami tylko do obsługi dwóch lub dyspozytorów. Opcjonalnie można pominąć generowanie interfejsu klasy i udostępnić interfejs niestandardowy. Uwidaczniasz lub pomijasz interfejs klasy, określając System.Runtime.InteropServices.ClassInterfaceType element członkowski wyliczenia. W przypadku zastosowania ClassInterfaceAttribute do zestawu atrybut odnosi się do wszystkich klas w zestawie, chyba że poszczególne klasy zastąpią ustawienie własnym atrybutem.

Mimo że interfejsy klas eliminują zadanie jawnego definiowania interfejsów dla każdej klasy, zdecydowanie odradza się ich użycie w aplikacjach produkcyjnych. Interfejsy podwójnej klasy umożliwiają klientom powiązanie z określonym układem interfejsu, który może ulec zmianie w miarę rozwoju klasy. Rozważmy na przykład klasę zarządzaną, która uwidacznia interfejs klasy klientom COM. Pierwsza wersja klasy zawiera metody North i South. Niezarządzany klient może powiązać z interfejsem klasy, który udostępnia North jako pierwszą metodę w interfejsie klasy i metodzie South jako drugą metodę. Teraz rozważmy następną wersję klasy, która ma nową metodę , Eastwstawioną między metodami North i South. Niezarządzani klienci, którzy próbują powiązać z nową klasą za pośrednictwem starego interfejsu klasy, kończą się wywołaniem metody , gdy zamierzają wywołać metodę East South, ponieważ pozycjonowanie metod w interfejsie uległo zmianie. Ponadto każda zmiana układu klasy bazowej wpływa również na układ interfejsu klasy dla wszystkich klas pochodnych. Klienci zarządzani, którzy są powiązani bezpośrednio z klasami, nie wykazują tych samych problemów z przechowywaniem wersji. Aby uzyskać szczegółowe wskazówki dotyczące korzystania z interfejsu klasy, zobacz COM Callable Wrapper(Wywoływana otoka COM).

Tlbimp.exe (importer biblioteki typów) zawsze ma zastosowanie do importowanych klas składowej ClassInterfaceType.None wyliczenia, aby wskazać, że istniejące klasy COM nigdy nie uwidaczniają zarządzanych interfejsów.

Konstruktory

ClassInterfaceAttribute(ClassInterfaceType)

Inicjuje ClassInterfaceAttribute nowe wystąpienie klasy z określonym ClassInterfaceType elementem członkowskim wyliczenia.

ClassInterfaceAttribute(Int16)

Inicjuje ClassInterfaceAttribute nowe wystąpienie klasy z określoną ClassInterfaceType wartością wyliczenia.

Właściwości

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)
Value

ClassInterfaceType Pobiera wartość opisujący typ interfejsu, który ma zostać wygenerowany dla klasy.

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

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

Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 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.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też