ClassInterfaceAttribute Classe

Definizione

Indica il tipo di interfaccia di classe da generare per una classe esposta a COM, se viene generata un'interfaccia.

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
Ereditarietà
ClassInterfaceAttribute
Attributi

Esempio

Nell'esempio seguente viene illustrato come applicare con ClassInterfaceAttribute il ClassInterfaceType valore AutoDispatch, che genera un'interfaccia IDispatch per 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

Commenti

È possibile applicare questo attributo agli assembly o alle classi.

Questo attributo controlla se l'utilità di esportazione della libreria dei tipi (Tlbexp.exe) genera automaticamente un'interfaccia di classe per la classe con attributi. Un'interfaccia di classe contiene lo stesso nome della classe stessa, ma il nome è preceduto da un carattere di sottolineatura. In caso di esposizione, l'interfaccia della classe contiene tutti i publicmembri , non static membri della classe gestita, inclusi i membri ereditati dalla relativa classe di base. Le classi gestite non possono accedere a un'interfaccia di classe e non devono accedere direttamente ai membri della classe. Tlbexp.exe genera un identificatore di interfaccia univoco (IID) per l'interfaccia della classe.

Le interfacce di classe possono essere interfacce duali o solo dispatch. Facoltativamente, è possibile eliminare la generazione dell'interfaccia della classe e fornire invece un'interfaccia personalizzata. È possibile esporre o eliminare un'interfaccia di classe specificando un System.Runtime.InteropServices.ClassInterfaceType membro di enumerazione. Quando si applica ClassInterfaceAttribute a un assembly, l'attributo si riferisce a tutte le classi nell'assembly, a meno che le singole classi non eseguano l'override dell'impostazione con il proprio attributo.

Sebbene le interfacce di classe eliminino l'attività di definire in modo esplicito le interfacce per ogni classe, l'uso nelle applicazioni di produzione è fortemente sconsigliato. Le interfacce di classe doppia consentono ai client di eseguire il binding a un layout di interfaccia specifico soggetto a modifiche man mano che la classe evolve. Si consideri, ad esempio, una classe gestita che espone un'interfaccia di classe ai client COM. La prima versione della classe contiene metodi North e South. Un client non gestito può essere associato all'interfaccia della classe , che fornisce North come primo metodo nell'interfaccia della classe e nel metodo South come secondo metodo. Si consideri ora la versione successiva della classe , che ha un nuovo metodo, East, inserito tra i metodi North e South. I client non gestiti che tentano di eseguire l'associazione alla nuova classe tramite l'interfaccia della classe precedente finiscono per chiamare il metodo East quando intendono chiamare il metodo South, perché il posizionamento dei metodi all'interno dell'interfaccia è cambiato. Inoltre, qualsiasi modifica al layout di una classe base influisce anche sul layout dell'interfaccia di classe per tutte le classi derivate. I client gestiti, che si associano direttamente alle classi, non presentano gli stessi problemi di controllo delle versioni. Per linee guida specifiche sull'uso di un'interfaccia di classe, vedere COM Callable Wrapper.

Il Tlbimp.exe (utilità di importazione della libreria dei tipi) si applica sempre alle classi importate dal ClassInterfaceType.None membro di enumerazione per indicare che le classi COM esistenti non espongono mai interfacce gestite.

Costruttori

Nome Descrizione
ClassInterfaceAttribute(ClassInterfaceType)

Inizializza una nuova istanza della ClassInterfaceAttribute classe con il membro di enumerazione specificato ClassInterfaceType .

ClassInterfaceAttribute(Int16)

Inizializza una nuova istanza della ClassInterfaceAttribute classe con il valore di enumerazione specificato ClassInterfaceType .

Proprietà

Nome Descrizione
TypeId

Se implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute.

(Ereditato da Attribute)
Value

Ottiene il valore che descrive il ClassInterfaceType tipo di interfaccia da generare per la classe .

Metodi

Nome Descrizione
Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per questa istanza.

(Ereditato da Attribute)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

Quando sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di identificatori dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo per un oggetto, che può essere utilizzato per ottenere le informazioni sul tipo per un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero di interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso alle proprietà e ai metodi esposti da un oggetto .

(Ereditato da Attribute)

Si applica a

Vedi anche