Partager via


ClassInterfaceType Énumération

Définition

Identifie le type d'interface de classe qui est généré pour une classe.

public enum class ClassInterfaceType
public enum ClassInterfaceType
[System.Serializable]
public enum ClassInterfaceType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ClassInterfaceType
type ClassInterfaceType = 
[<System.Serializable>]
type ClassInterfaceType = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ClassInterfaceType = 
Public Enum ClassInterfaceType
Héritage
ClassInterfaceType
Attributs

Champs

AutoDispatch 1

Indique que la classe ne prend en charge que la liaison tardive pour des clients COM. Une dispinterface pour la classe est automatiquement exposée aux clients COM à la demande. La bibliothèque de types générée par l’outil Tlbexp.exe (exportateur de bibliothèques de types) ne contient pas d’informations de type pour la dispinterface afin d’empêcher les clients de mettre en cache les DISPID de l’interface. La dispinterface ne présente pas les problèmes de versioning décrits dans ClassInterfaceAttribute car les clients ne peuvent se lier à l'interface que par liaison tardive.

Il s’agit d’un paramètre par défaut pour ClassInterfaceAttribute.

AutoDual 2

Indique qu'une interface de classe double est automatiquement générée pour la classe et exposée à COM. Les informations de type sont générées pour l'interface de classe et publiées dans la bibliothèque de types. L'utilisation de AutoDual est fortement déconseillée en raison des limitations de versioning décrites dans ClassInterfaceAttribute.

None 0

Indique qu'aucune interface de classe n'est générée pour la classe. Si aucune interface n'est explicitement implémentée, la classe ne permet que l'accès par liaison tardive à l'aide de l'interface IDispatch. Il s'agit du paramètre recommandé pour ClassInterfaceAttribute. L'utilisation de ClassInterfaceType.None est la seule manière d'exposer les fonctionnalités via des interfaces implémentées explicitement par la classe.

Tlbexp.exe (Exportateur de bibliothèques de types) expose la première interface publique visible par COM implémentée par la classe en tant qu’interface par défaut de la coclasse. Dans .NET Framework 2.0 et versions ultérieures, vous pouvez spécifier l’interface par défaut exposée à COM à l’aide de l’attribut ComDefaultInterfaceAttribute . Si la classe n’implémente aucune interface, la première interface publique visible par COM implémentée par une classe de base devient l’interface par défaut (à partir de la dernière classe de base dérivée et fonctionnant en arrière). Tlbexp.exe expose _Object en tant qu’interface par défaut si ni la classe ni ses classes de base n’implémentent des interfaces.

Exemples

Cet exemple montre comment appliquer le ClassInterfaceAttribute à un type, en définissant le ClassInterfaceType. Les classes définies de cette façon peuvent être utilisées à partir de COM non managé.

using namespace System;
using namespace System::Runtime::InteropServices;

// Have the CLR expose a class interface (derived from IDispatch)
// for this type. COM clients can call the  members of this
// class using the Invoke method from the IDispatch interface.
[ClassInterface(ClassInterfaceType::AutoDispatch)]
public ref class AClassUsableViaCOM
{
public:
    AClassUsableViaCOM() 
    { 
    }

public:
    int Add(int x, int y)
    {
        return x + y;
    }
};

// The CLR does not expose a class interface for this type.
// COM clients can call the members of this class using
// the methods from the IComparable interface.
[ClassInterface(ClassInterfaceType::None)]
public ref class AnotherClassUsableViaCOM : public IComparable
{
public:
    AnotherClassUsableViaCOM() 
    { 
    }

    virtual int CompareTo(Object^ o) = IComparable::CompareTo
    {
        return 0;
    }
};
using System;
using System.Runtime.InteropServices;

// Have the CLR expose a class interface (derived from IDispatch) for this type.
// COM clients can call the  members of this class using the Invoke method from the IDispatch interface.
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class AClassUsableViaCOM
{
    public AClassUsableViaCOM() { }

    public Int32 Add(Int32 x, Int32 y) { return x + y; }
}

// The CLR does not expose a class interface for this type.
// COM clients can call the members of this class using the methods from the IComparable interface.
[ClassInterface(ClassInterfaceType.None)]
public class AnotherClassUsableViaCOM : IComparable
{
    public AnotherClassUsableViaCOM() { }

    Int32 IComparable.CompareTo(Object o) { return 0; }
}
Imports System.Runtime.InteropServices


' Have the CLR expose a class interface (derived from IDispatch) for this type.
' COM clients can call the  members of this class using the Invoke method from the IDispatch interface.
<ClassInterface(ClassInterfaceType.AutoDispatch)> _
Public Class AClassUsableViaCOM

    Public Sub New()

    End Sub

    Public Function Add(ByVal x As Int32, ByVal y As Int32) As Int32
        Return x + y

    End Function
End Class
' The CLR does not expose a class interface for this type.
' COM clients can call the members of this class using the methods from the IComparable interface.
<ClassInterface(ClassInterfaceType.None)> _
Public Class AnotherClassUsableViaCOM
    Implements IComparable

    Public Sub New()

    End Sub

    Function CompareTo(ByVal o As [Object]) As Int32 Implements IComparable.CompareTo
        Return 0

    End Function 'IComparable.CompareTo
End Class

Remarques

Cette énumération est utilisée conjointement avec l’attribut ClassInterfaceAttribute .

S’applique à

Voir aussi