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 ClassInterfaceAttribute seguente viene illustrato come applicare con 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. Se esposta, l'interfaccia della classe contiene tutti i publicmembri , non membri static della classe gestita, inclusi i membri ereditati dalla relativa classe 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 di tipo dual o dispatch-only. 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 è relativo 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 definizione esplicita delle 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 si 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 include 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 di 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 apportata 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

ClassInterfaceAttribute(ClassInterfaceType)

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

ClassInterfaceAttribute(Int16)

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

Proprietà

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)
Value

Ottiene il valore ClassInterfaceType che descrive il tipo di interfaccia che deve essere generato per la classe.

Metodi

Equals(Object)

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

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di 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 equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

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

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

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle 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 a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a

Vedi anche