Comparteix a través de


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

AutoDispatch 1

Indica que la clase sólo admite enlaces en tiempo de ejecución para los clientes COM. Si se solicita, se expone automáticamente a los clientes COM una interfaz dispinterface para la clase. La biblioteca de tipos creada por Tlbexp.exe (exportador de la biblioteca de tipos) no contiene información de tipos para la interfaz dispinterface con el fin de impedir que los clientes almacenen en memoria caché los DISPID de la interfaz. La interfaz dispinterface no presenta los problemas de control de versiones descritos en ClassInterfaceAttribute, ya que los clientes solo se pueden enlazar a la interfaz en tiempo de ejecución.

Esta es la configuración predeterminada de ClassInterfaceAttribute.

AutoDual 2

Indica que se genera una interfaz de clase dual para la clase y se expone a COM automáticamente. Se genera la información de tipos para la interfaz de clase y se publica en la biblioteca de tipos. Se desaconseja el uso de AutoDual debido a las limitaciones de las versiones descritas en ClassInterfaceAttribute.

None 0

Indica que no se genera ninguna interfaz de clase para la clase. Si no se implementan interfaces explícitamente, la clase solo proporcionará acceso de enlace en tiempo de ejecución a través de la interfaz IDispatch. Éste es el valor recomendado para ClassInterfaceAttribute. La utilización de ClassInterfaceType.None es la única manera de exponer 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 visible para COM implementada por la clase como interfaz predeterminada de la coclase. En .NET Framework 2.0 y versiones posteriores, puede especificar la interfaz predeterminada expuesta a COM mediante el uso del atributo ComDefaultInterfaceAttribute. Si la clase no implementa ninguna interfaz, la interfaz predeterminada será la primera pública y visible para COM implementada por una clase base (empezando por la clase base derivada más recientemente y en orden inverso). Si ni la clase ni las clases base implementan ninguna interfaz, Tlbexp.exe expone _Object como interfaz predeterminada.

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