ClassInterfaceAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Indica el tipo de interfaz de clase que se generará para una clase expuesta a COM si no se genera una interfaz.
public ref class ClassInterfaceAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
public sealed class ClassInterfaceAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ClassInterfaceAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)>]
type ClassInterfaceAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ClassInterfaceAttribute = class
inherit Attribute
Public NotInheritable Class ClassInterfaceAttribute
Inherits Attribute
- Herencia
- Atributos
Ejemplos
En el ejemplo siguiente se muestra cómo aplicar con ClassInterfaceAttribute el ClassInterfaceType valor AutoDispatch, que genera una IDispatch
interfaz para MyClass
.
using namespace System::Runtime::InteropServices;
[ClassInterface(ClassInterfaceType::AutoDispatch)]
public ref class MyClass
{
public:
MyClass(){}
};
using System.Runtime.InteropServices;
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class MyClass
{
public MyClass() {}
}
Imports System.Runtime.InteropServices
<ClassInterface(ClassInterfaceType.AutoDispatch)> _
Public Class SampleClass
' Insert class members here.
End Class
Comentarios
Puede aplicar este atributo a ensamblados o clases.
Este atributo controla si el exportador de la biblioteca de tipos (Tlbexp.exe) genera automáticamente una interfaz de clase para la clase con atributos. Una interfaz de clase lleva el mismo nombre que la propia clase, pero el nombre tiene como prefijo un carácter de subrayado. Cuando se expone, la interfaz de clase contiene todos los public
miembros , que no static
son miembros de la clase administrada, incluidos los miembros heredados de su clase base. Las clases administradas no pueden acceder a una interfaz de clase y no tienen necesidad de tener acceso a los miembros de la clase directamente. Tlbexp.exe genera un identificador de interfaz único (IID) para la interfaz de clase.
Las interfaces de clase pueden ser interfaces de solo envío o duales. Opcionalmente, puede suprimir la generación de la interfaz de clase y proporcionar una interfaz personalizada en su lugar. Exponga o suprima una interfaz de clase especificando un System.Runtime.InteropServices.ClassInterfaceType miembro de enumeración. Cuando se aplica ClassInterfaceAttribute a un ensamblado, el atributo pertenece a todas las clases del ensamblado a menos que las clases individuales invaliden la configuración con su propio atributo.
Aunque las interfaces de clase eliminan la tarea de definir explícitamente interfaces para cada clase, su uso en aplicaciones de producción no se recomienda encarecidamente. Las interfaces de clase dual permiten a los clientes enlazar a un diseño de interfaz específico que está sujeto a cambios a medida que evoluciona la clase. Por ejemplo, considere una clase administrada que expone una interfaz de clase a clientes COM. La primera versión de la clase contiene métodos North
y South
. Un cliente no administrado puede enlazarse a la interfaz de clase , que proporciona North
como el primer método de la interfaz de clase y el método South
como segundo método. Ahora considere la siguiente versión de la clase , que tiene un nuevo método, East
, insertado entre los métodos North
y South
. Los clientes no administrados que intentan enlazar a la nueva clase a través de la interfaz de clase antigua terminan llamando al método cuando pretenden llamar al método East
South
, porque el posicionamiento de los métodos dentro de la interfaz ha cambiado. Además, cualquier cambio en el diseño de una clase base también afecta al diseño de la interfaz de clase para todas las clases derivadas. Los clientes administrados, que se enlazan directamente a clases, no presentan los mismos problemas de control de versiones. Para obtener instrucciones específicas sobre el uso de una interfaz de clase, consulte Contenedor al que se puede llamar COM.
El Tlbimp.exe (Importador de biblioteca de tipos) siempre se aplica a las clases importadas que el ClassInterfaceType.None miembro de enumeración indica que las clases COM existentes nunca exponen interfaces administradas.
Constructores
ClassInterfaceAttribute(ClassInterfaceType) |
Inicializa una nueva instancia de la clase ClassInterfaceAttribute con el miembro de enumeración ClassInterfaceType especificado. |
ClassInterfaceAttribute(Int16) |
Inicializa una nueva instancia de la clase ClassInterfaceAttribute con el valor de enumeración ClassInterfaceType especificado. |
Propiedades
TypeId |
Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Heredado de Attribute) |
Value |
Obtiene el valor de ClassInterfaceType que describe qué tipo de interfaz debe generarse para la clase. |
Métodos
Equals(Object) |
Devuelve un valor que indica si esta instancia es igual que un objeto especificado. (Heredado de Attribute) |
GetHashCode() |
Devuelve el código hash de esta instancia. (Heredado de Attribute) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
IsDefaultAttribute() |
Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada. (Heredado de Attribute) |
Match(Object) |
Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado. (Heredado de Attribute) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
Implementaciones de interfaz explícitas
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Heredado de Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Heredado de Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1). (Heredado de Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Proporciona acceso a las propiedades y los métodos expuestos por un objeto. (Heredado de Attribute) |