ClassInterfaceAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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 public
membri , non membri static
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 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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per