Condividi tramite


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 l'oggetto con il valore , che genera un'interfaccia ClassInterfaceAttributeClassInterfaceTypeIDispatch per .MyClassAutoDispatch

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 Type Library Exporter (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 static membri della classe gestita, inclusi i membri ereditati dalla classe base. Le classi gestite non possono accedere a un'interfaccia di classe e non hanno bisogno di 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 sola distribuzione o doppia. Facoltativamente, è possibile eliminare la generazione dell'interfaccia della classe e fornire invece un'interfaccia personalizzata. Si espone o si elimina un'interfaccia di classe specificando un System.Runtime.InteropServices.ClassInterfaceType membro di enumerazione. Quando si applica ClassInterfaceAttribute a un assembly, l'attributo riguarda tutte le classi dell'assembly, a meno che le singole classi non eseseguono l'override dell'impostazione con il proprio attributo.

Anche se le interfacce di classe eliminano l'attività di definire in modo esplicito le interfacce per ogni classe, il loro uso nelle applicazioni di produzione è fortemente sconsigliato. Le interfacce di classe doppia consentono ai client di associare 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 come secondo metodo South . Prendere ora in considerazione la versione successiva della classe, che ha un nuovo metodo, , Eastinserito tra metodi North e South. I client non gestiti che tentano di associare alla nuova classe tramite il metodo di chiamata dell'interfaccia di classe precedente quando intendono chiamare il metodo EastSouth, perché la posizione dei metodi all'interno dell'interfaccia è stata modificata. Inoltre, qualsiasi modifica al layout di una classe di base influisce anche sul layout dell'interfaccia della 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 Wrapper chiamabile COM.

Il Tlbimp.exe (Type Library Import) 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