ClassInterfaceAttribute Classe

Définition

Indique le type d'interface de classe à générer pour une classe exposée à COM, si une interface est effectivement générée.

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
Héritage
ClassInterfaceAttribute
Attributs

Exemples

L’exemple suivant montre comment appliquer la ClassInterfaceAttribute ClassInterfaceType valeur AutoDispatch, qui génère une IDispatch interface pour 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

Remarques

Vous pouvez appliquer cet attribut à des assemblys ou des classes.

Cet attribut détermine si l’exportateur de bibliothèque de types (Tlbexp.exe) génère automatiquement une interface de classe pour la classe attributée. Une interface de classe porte le même nom que la classe elle-même, mais le nom est précédé d’un trait de soulignement. Lorsqu’elle est exposée, l’interface de classe contient tous les publicmembres non membres static de la classe managée, y compris les membres hérités de sa classe de base. Les classes managées ne peuvent pas accéder à une interface de classe et n’ont pas besoin d’accéder directement aux membres de classe. Tlbexp.exe génère un identificateur d’interface unique (IID) pour l’interface de classe.

Les interfaces de classe peuvent être des interfaces doubles ou distribuées uniquement. Si vous le souhaitez, vous pouvez supprimer la génération de l’interface de classe et fournir une interface personnalisée à la place. Vous exposez ou supprimez une interface de classe en spécifiant un System.Runtime.InteropServices.ClassInterfaceType membre d’énumération. Lorsque vous appliquez ClassInterfaceAttribute à un assembly, l’attribut se rapporte à toutes les classes de l’assembly, sauf si les classes individuelles remplacent le paramètre par leur propre attribut.

Bien que les interfaces de classe éliminent la tâche de définition explicite d’interfaces pour chaque classe, leur utilisation dans les applications de production est fortement déconseillée. Les interfaces à deux classes permettent aux clients de se lier à une disposition d’interface spécifique susceptible de changer à mesure que la classe évolue. Par exemple, considérez une classe managée qui expose une interface de classe aux clients COM. La première version de la classe contient des méthodes North et South. Un client non managé peut être lié à l’interface de classe, qui fournit North la première méthode dans l’interface de classe et la méthode South comme deuxième méthode. Considérez maintenant la prochaine version de la classe, qui a une nouvelle méthode, Eastinsérée entre les méthodes North et South. Les clients non managés qui tentent de lier à la nouvelle classe via l’ancienne interface de classe finissent par appeler la méthode lorsqu’ils ont l’intention d’appeler la méthode East South, car le positionnement des méthodes au sein de l’interface a changé. En outre, toute modification apportée à la disposition d’une classe de base affecte également la disposition de l’interface de classe pour toutes les classes dérivées. Les clients managés, qui se lient directement aux classes, n’affichent pas les mêmes problèmes de contrôle de version. Pour obtenir des instructions spécifiques sur l’utilisation d’une interface de classe, consultez WRAPPER POUVANT ÊTRE APPELÉ COM.

Le Tlbimp.exe (Importateur de bibliothèque de types) s’applique toujours aux classes importées, le ClassInterfaceType.None membre d’énumération pour indiquer que les classes COM existantes n’exposent jamais d’interfaces managées.

Constructeurs

ClassInterfaceAttribute(ClassInterfaceType)

Initialise une nouvelle instance de la classe ClassInterfaceAttribute avec le membre de l'énumération ClassInterfaceType spécifié.

ClassInterfaceAttribute(Int16)

Initialise une nouvelle instance de la classe ClassInterfaceAttribute avec la valeur d'énumération ClassInterfaceType spécifiée.

Propriétés

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)
Value

Obtient la valeur ClassInterfaceType qui décrit le type d'interface qui doit être généré pour la classe.

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

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

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à

Voir aussi