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

Nome Valore Descrizione
None 0

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

Tlbexp.exe (Utilità di esportazione della libreria dei tipi) espone la prima interfaccia visibile COM pubblica 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 visibile com implementata da una classe di base diventa l'interfaccia predefinita ,a partire dalla classe base derivata più di recente e dall'uso indietro. Tlbexp.exe espone _Object come interfaccia predefinita se né la classe né le relative classi di base implementano interfacce.

AutoDispatch 1

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

Questa è l'impostazione predefinita per ClassInterfaceAttribute.

AutoDual 2

Indica che viene generata automaticamente un'interfaccia dual class per la classe ed esposta a COM. Le informazioni sui tipi vengono generate per l'interfaccia della classe e pubblicate nella libreria dei tipi. L'uso AutoDual di è fortemente sconsigliato a causa delle limitazioni di controllo delle versioni descritte in ClassInterfaceAttribute.

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 utilizzata insieme all'attributo ClassInterfaceAttribute .

Si applica a

Vedi anche