Partilhar via


ClassInterfaceType Enumeração

Definição

Identifica o tipo de interface de classe que é gerado para uma 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
Herança
ClassInterfaceType
Atributos

Campos

AutoDispatch 1

Indica que a classe só dá suporte à associação tardia para clientes COM. Um dispinterface para a classe é exposto automaticamente aos clientes COM na solicitação. A biblioteca de tipos produzida por Tlbexp.exe (Exportador da Biblioteca de Tipos) não contém informações de tipo para o dispinterface para evitar que os clientes armazenem em cache os DISPIDs da interface. O dispinterface não apresenta os problemas de controle de versão descritos em ClassInterfaceAttribute porque os clientes podem apenas fazer a associação tardia com a interface.

Essa é a configuração padrão para ClassInterfaceAttribute.

AutoDual 2

Indica que uma interface de classe dupla é automaticamente gerada para a classe e exposta a COM. Informações de tipo são geradas para a interface de classe e publicadas na biblioteca de tipos. Usar AutoDual não é recomendável devido a restrições de controle de versão descritas em ClassInterfaceAttribute.

None 0

Indica que nenhuma interface de classe é gerada para a classe. Se nenhuma interface for implementada explicitamente, a classe só poderá fornecer acesso de associação tardia por meio da interface IDispatch. Essa é a configuração recomendada para ClassInterfaceAttribute. Usar ClassInterfaceType.None é a única maneira de expor a funcionalidade por meio de interfaces explicitamente implementadas pela classe.

Tlbexp.exe (Exportador da Biblioteca de Tipos) expõe a primeira interface pública visível por COM implementada pela classe como a interface padrão da coclass. No .NET Framework 2.0 e versões posteriores, você pode especificar a interface padrão exposta ao COM usando o ComDefaultInterfaceAttribute atributo . Se a classe não implementar nenhuma interface, a primeira interface pública visível por COM implementada por uma classe base se tornará a interface padrão (começando com a classe base derivada mais recente e trabalhando para trás). Tlbexp.exe exposto como _Object a interface padrão se nem a classe nem suas classes base implementarem interfaces.

Exemplos

Este exemplo mostra como aplicar o ClassInterfaceAttribute a um tipo, definindo o ClassInterfaceType. Classes definidas dessa maneira podem ser usadas de COM não gerenciado.

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

Comentários

Essa enumeração é usada em conjunto com o ClassInterfaceAttribute atributo .

Aplica-se a

Confira também