ClassInterfaceAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje typ interfejsu klasy, który ma zostać wygenerowany dla klasy uwidocznionej w modelu COM, jeśli w ogóle zostanie wygenerowany 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
- Atrybuty
Przykłady
W poniższym przykładzie pokazano, jak zastosować ClassInterfaceAttribute element z wartością ClassInterfaceTypeAutoDispatch, 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 nosi taką samą nazwę jak sama klasa, ale nazwa jest poprzedzona znakiem podkreślenia. Po ujawnieniu interfejs klasy zawiera wszystkie publicelementy , które nie należą static do 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 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 zamiast tego udostępnić interfejs niestandardowy. Uwidaczniasz lub pomijasz interfejs klasy, określając składową System.Runtime.InteropServices.ClassInterfaceType wyliczenia. W przypadku zastosowania ClassInterfaceAttribute do zestawu atrybut dotyczy 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, ich użycie w aplikacjach produkcyjnych jest zdecydowanie odradzane. 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ć nową klasę za pośrednictwem starego interfejsu klasy, kończą się wywołaniem metody podczas wywoływania metody EastSouth, 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.
Tlbimp.exe (Importer biblioteki typów) zawsze ma zastosowanie do importowanych klas składowych ClassInterfaceType.None wyliczenia, aby wskazać, że istniejące klasy COM nigdy nie uwidaczniają zarządzanych interfejsów.
Konstruktory
| Nazwa | Opis |
|---|---|
| ClassInterfaceAttribute(ClassInterfaceType) |
Inicjuje ClassInterfaceAttribute nowe wystąpienie klasy przy użyciu określonego ClassInterfaceType elementu członkowskiego wyliczenia. |
| ClassInterfaceAttribute(Int16) |
Inicjuje nowe wystąpienie ClassInterfaceAttribute klasy z określoną ClassInterfaceType wartością wyliczenia. |
Właściwości
| Nazwa | Opis |
|---|---|
| TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attribute. (Odziedziczone po Attribute) |
| Value |
ClassInterfaceType Pobiera wartość opisujący typ interfejsu, który ma zostać wygenerowany dla klasy. |
Metody
| Nazwa | Opis |
|---|---|
| Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
| GetHashCode() |
Zwraca kod skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| IsDefaultAttribute() |
Po zastąpieniu w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej. (Odziedziczone po Attribute) |
| Match(Object) |
Po zastąpieniu 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 Object. (Odziedziczone po Object) |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
| Nazwa | Opis |
|---|---|
| _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 uzyskania 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) |
Zapewnia dostęp do właściwości i metod uwidocznionych przez obiekt. (Odziedziczone po Attribute) |