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 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
- Atrybuty
Przykłady
W poniższym przykładzie pokazano, jak zastosować element ClassInterfaceAttribute z wartością ClassInterfaceTypeAutoDispatch, która generuje IDispatch
interfejs dla MyClass
elementu .
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 public
elementy 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ę , East
wstawioną 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ę East
South
, 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) |