Questo argomento non è stato ancora valutato - Valuta questo argomento

Classe ClassInterfaceAttribute

Indica il tipo di interfaccia di classe che viene generato per una classe esposta a COM, se viene creata un'interfaccia.

Spazio dei nomi: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)

[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false)] 
public sealed class ClassInterfaceAttribute : Attribute
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false) */ 
public final class ClassInterfaceAttribute extends Attribute
ComVisibleAttribute(true) 
AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, Inherited=false) 
public final class ClassInterfaceAttribute extends Attribute

È possibile applicare questo attributo alle classi o agli assembly.

Questo attributo determina 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 ha lo stesso nome della classe, ma preceduto da un carattere di sottolineatura. Quando viene esposta, l'interfaccia di classe contiene tutti i membri public, non static della classe gestita, inclusi i membri ereditati dalla classe base. Le classi gestite non possono accedere a un'interfaccia di classe e non è necessario che lo facciano, in quanto possono accedere direttamente ai membri della classe. Tlbexp.exe genera un identificatore di interfaccia univoco (IID) per l'interfaccia di classe.

Le interfaccia di classe possono essere duali o solo dispatch. Facoltativamente, è possibile impedire che venga generata l'interfaccia di classe e fornire invece un'interfaccia personalizzata. Si espone o si elimina un'interfaccia di classe specificando un membro di enumerazione System.Runtime.InteropServices.ClassInterfaceType. Quando si applica ClassInterfaceAttribute a un assembly, l'attributo riguarda tutte le classi dell'assembly a meno che le singole classi eseguano l'override dell'impostazione con il relativo attributo.

Anche se le interfacce di classe eliminano l'operazione che consente di definire esplicitamente le interfacce per ciascuna classe, ne è sconsigliato l'utilizzo nelle applicazioni di produzione. Le interfacce di classe duali consentono ai client di effettuare l'associazione a un layout di interfaccia specifico, soggetto a modifiche con l'evoluzione della classe. 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ò eseguire l'associazione all'interfaccia di classe che fornisce North come primo metodo dell'interfaccia di classe e South come secondo metodo. Si consideri ora la versione successiva della classe che contiene un nuovo metodo East, inserito tra i metodi North e South . I client non gestiti che tentano di effettuare l'associazione alla nuova classe tramite l'interfaccia di classe precedente, finiscono per chiamare il metodo East quando intendono chiamare il metodo South, poiché la posizione del metodo nell'interfaccia è cambiata. Inoltre, le modifiche al layout di una classe base influenzano anche il layout dell'interfaccia di classe di tutte le classi derivate. I client gestiti, che effettuano l'associazione direttamente alle classi, non manifestano gli stessi problemi di controllo delle versioni. Per indicazioni specifiche sull'utilizzo di un'interfaccia di classe, vedere Introduzione all'interfaccia della classe .

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

Nell'esempio che segue viene illustrato come applicare l'attributo ClassInterfaceAttribute con il valore ClassInterfaceTypeAutoDispatch che genera un'interfaccia IDispatch per MyClass.

using System.Runtime.InteropServices;

[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class MyClass
{
   public MyClass() {}
}

import System.Runtime.InteropServices.*;

/** @attribute ClassInterface(ClassInterfaceType.AutoDispatch)
 */
public class MyClass
{
    public MyClass()
    {
    } //MyClass
} //MyClass 

System.Object
   System.Attribute
    System.Runtime.InteropServices.ClassInterfaceAttribute
I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0
Il documento è risultato utile?
(1500 caratteri rimanenti)

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
© 2013 Microsoft. Tutti i diritti riservati.