Udostępnij za pośrednictwem


ClassInterfaceAttribute Klasa

Definicja

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

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ć element ClassInterfaceAttribute z wartością ClassInterfaceTypeAutoDispatch, która generuje IDispatch interfejs dla MyClasselementu .

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 nosi taką samą nazwę jak sama klasa, ale nazwa jest poprzedzona znakiem podkreślenia. Po ujawnieniu interfejs klasy zawiera wszystkie publicelementy członkowskie static klasy zarządzanej, w tym elementy członkowskie dziedziczone z klasy bazowej. Klasy zarządzane nie mogą uzyskać dostępu do interfejsu klasy i nie muszą uzyskiwać bezpośredniego dostępu do składowych klas. Tlbexp.exe generuje unikatowy identyfikator interfejsu (IID) dla interfejsu klasy.

Interfejsy klas mogą być interfejsami tylko do obsługi dwóch lub wysyłania. Opcjonalnie można pominąć generowanie interfejsu klasy i udostępnić interfejs niestandardowy. Interfejs klasy można uwidocznić lub pominąć, 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ępują ustawienie własnym atrybutem.

Chociaż interfejsy klas eliminują zadanie jawnego definiowania interfejsów dla każdej klasy, ich użycie w aplikacjach produkcyjnych jest zdecydowanie zniechęcane. 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ć się z interfejsem klasy, który udostępnia North jako pierwszą metodę w interfejsie klasy i metodzie South jako drugą metodę. Teraz rozważ 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ć nową klasę za pośrednictwem starego interfejsu klasy, kończą się wywołaniem metody, gdy zamierzają wywołać metodę EastSouth, ponieważ pozycjonowanie metod w interfejsie uległo zmianie. Ponadto każda zmiana układu klasy bazowej ma również wpływ na układ interfejsu klasy dla wszystkich klas pochodnych. Klienci zarządzani, którzy wiążą się 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.

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

Konstruktory

ClassInterfaceAttribute(ClassInterfaceType)

Inicjuje ClassInterfaceAttribute nowe wystąpienie klasy przy użyciu określonego ClassInterfaceType elementu członkowskiego 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 elementu Attribute.

(Odziedziczone po Attribute)
Value

ClassInterfaceType Pobiera wartość opisującą 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 bieżące wystąpienie.

(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)

W przypadku zastąpienia 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 obiektu, którego można użyć do pobrania informacji o typie 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ż