Enumeración ClassInterfaceType

 

Publicado: octubre de 2016

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

Espacio de nombres:   System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

Sintaxis

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum ClassInterfaceType
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class ClassInterfaceType
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ClassInterfaceType
<SerializableAttribute>
<ComVisibleAttribute(True)>
Public Enumeration ClassInterfaceType

Miembros

Nombre de miembro Descripción
AutoDispatch

Indica que la clase sólo admite el enlace para los clientes COM. Un dispinterface para la clase se expone automáticamente a los clientes COM en la solicitud. La biblioteca de tipos generada por Tlbexp.exe (exportador de la biblioteca de tipos) no contiene información de tipo para el dispinterface para evitar que los clientes de almacenamiento en caché los identificadores DispId de la interfaz. El dispinterface no presenta los problemas de versiones descritos en ClassInterfaceAttribute porque los clientes solo se pueden enlazar a la interfaz en tiempo de ejecución.

AutoDual

Indica que una interfaz de clase dual automáticamente está generada para la clase y se expone a COM. Información de tipo se genera para la interfaz de clase y publicado en la biblioteca de tipos. Con AutoDual se desaconseja debido a las limitaciones de las versiones descritas en ClassInterfaceAttribute.

None

Indica que no se ha generado ninguna interfaz de clase para la clase. Si no se implementan interfaces explícitamente, la clase sólo proporcionará acceso en tiempo de ejecución a través de la IDispatch interfaz. Esta es la configuración recomendada para ClassInterfaceAttribute. Con ClassInterfaceType.None es la única manera de exponer funcionalidad a través de interfaces implementadas explícitamente por la clase.

Comentarios

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

Ejemplos

Este ejemplo muestra cómo aplicar el ClassInterfaceAttribute a un tipo, estableciendo el ClassInterfaceType. Clases definidas de esta manera pueden utilizarse desde COM no administrado.

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
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
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;
    }
};

Información de versión

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Ver también

Espacio de nombres System.Runtime.InteropServices
Tlbexp.exe (Type Library Exporter)

Volver al principio