ClassInterfaceType Enumeración

Definición

Identifica el tipo de interfaz de clase que se genera para una clase.

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
Herencia
ClassInterfaceType
Atributos

Campos

Nombre Valor Description
None 0

Indica que no se genera ninguna interfaz de clase para la clase . Si no se implementa ninguna interfaz explícitamente, la clase solo puede proporcionar acceso enlazado en tiempo de ejecución a través de la IDispatch interfaz . Esta es la configuración recomendada para ClassInterfaceAttribute. El uso ClassInterfaceType.None es la única manera de exponer la funcionalidad a través de interfaces implementadas explícitamente por la clase .

Tlbexp.exe (Exportador de biblioteca de tipos) expone la primera interfaz pública y visible para COM implementada por la clase como la interfaz predeterminada de la coclase. En .NET Framework 2.0 y versiones posteriores, puede especificar la interfaz predeterminada expuesta a COM mediante el atributo ComDefaultInterfaceAttribute. Si la clase no implementa ninguna interfaz, la primera interfaz pública y visible para COM implementada por una clase base se convierte en la interfaz predeterminada (empezando por la clase base derivada más recientemente y trabajando hacia atrás). Tlbexp.exe expone _Object como interfaz predeterminada si ni la clase ni sus clases base implementan interfaces.

AutoDispatch 1

Indica que la clase solo admite el enlace en tiempo de espera para los clientes COM. Para dispinterface la clase se expone automáticamente a los clientes COM bajo petición. La biblioteca de tipos producida por Tlbexp.exe (exportador de biblioteca de tipos) no contiene información de tipo para dispinterface para evitar que los clientes puedan almacenar en caché los DISPID de la interfaz. no dispinterface presenta los problemas de control de versiones descritos en ClassInterfaceAttribute porque los clientes solo pueden enlazarse en tiempo de compilación a la interfaz.

Esta es la configuración predeterminada para ClassInterfaceAttribute.

AutoDual 2

Indica que se genera automáticamente una interfaz de clase dual para la clase y se expone a COM. La información de tipo se genera para la interfaz de clase y se publica en la biblioteca de tipos. No AutoDual se recomienda usar debido a las limitaciones de control de versiones descritas en ClassInterfaceAttribute.

Ejemplos

En este ejemplo se muestra cómo aplicar a ClassInterfaceAttribute un tipo , estableciendo .ClassInterfaceType Las clases definidas de esta manera se pueden usar desde COM no administrado.

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

Comentarios

Esta enumeración se usa junto con el ClassInterfaceAttribute atributo .

Se aplica a

Consulte también