Condividi tramite


ClassInterfaceType Enumerazione

Definizione

Identifica il tipo di interfaccia di classe generata per una 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
Ereditarietà
ClassInterfaceType
Attributi

Campi

AutoDispatch 1

Indica che la classe supporta solo l'associazione tardiva dei client COM. Una dispinterface per la classe viene esposta automaticamente ai client COM su richiesta. La libreria dei tipi prodotta da Tlbexp.exe (utilità di esportazione della libreria dei tipi) non contiene informazioni sui tipi per dispinterface allo scopo di impedire ai client di memorizzare nella cache i DISPID dell'interfaccia. La dispinterface non mostra i problemi di controllo delle versioni descritti in ClassInterfaceAttribute perché i client possono eseguire soltanto l'associazione tardiva all'interfaccia.

Questa è l'impostazione predefinita per ClassInterfaceAttribute.

AutoDual 2

Indica che un'interfaccia di classe duale viene generata automaticamente per la classe ed esposta a COM. Le informazioni sul tipo sono prodotte per l'interfaccia di classe e pubblicate nella libreria dei tipi. L'utilizzo di AutoDual è fortemente sconsigliato a causa delle limitazioni nel controllo delle versioni descritte in ClassInterfaceAttribute.

None 0

Indica che per la classe non viene generata alcuna interfaccia di classe. Se nessuna interfaccia viene implementata in modo esplicito, la classe può fornire solo accesso ad associazione tardiva tramite l'interfaccia IDispatch. Si tratta dell'impostazione consigliata per ClassInterfaceAttribute. L'utilizzo di ClassInterfaceType.None è l'unico modo per l'esporre la funzionalità tramite interfacce implementate in modo esplicito dalla classe.

Tlbexp.exe (Type Library Exporter) espone la prima interfaccia pubblica e visibile da COM implementata dalla classe come interfaccia predefinita della coclasse. In .NET Framework 2.0 e versioni successive è possibile specificare l'interfaccia predefinita esposta a COM usando l'attributo ComDefaultInterfaceAttribute . Se la classe non implementa interfacce, la prima interfaccia pubblica, com-visibile implementata da una classe di base diventa l'interfaccia predefinita (a partire dalla classe di base derivata più di recente e funzionante all'indietro). Tlbexp.exe espone _Object come interfaccia predefinita se né la classe né le relative classi di base implementano interfacce.

Esempio

In questo esempio viene illustrato come applicare l'oggetto ClassInterfaceAttribute a un tipo, impostando .ClassInterfaceType Le classi definite in questo modo possono essere usate da COM non gestito.

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

Commenti

Questa enumerazione viene usata insieme all'attributo ClassInterfaceAttribute .

Si applica a

Vedi anche