ClassInterfaceAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica o tipo de interface de classe a ser gerada para uma classe exposta ao COM, caso uma interface seja gerada.
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
- Herança
- Atributos
Exemplos
O exemplo seguinte mostra como aplicar o ClassInterfaceAttribute com o ClassInterfaceType valor AutoDispatch, que gera uma IDispatch interface 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
Observações
Pode aplicar este atributo a assemblies ou classes.
Este atributo controla se o Type Library Exporter (Tlbexp.exe) gera automaticamente uma interface de classe para a classe atribuída. Uma interface de classe tem o mesmo nome da própria classe, mas o nome é precedido por um sublinhado. Quando exposta, a interface da classe contém todos os public, não membros static da classe gerida, incluindo membros herdados da sua classe base. As classes geridas não podem aceder a uma interface de classe e não têm necessidade de o fazer, pois podem aceder diretamente aos membros da classe. Tlbexp.exe gera um identificador de interface único (IID) para a interface da classe.
As interfaces de classe podem ser duplas ou apenas interfaces de despacho. Opcionalmente, pode suprimir a geração da interface da classe e fornecer uma interface personalizada em vez disso. Expões ou suprimes uma interface de classe especificando um System.Runtime.InteropServices.ClassInterfaceType membro de enumeração. Quando aplicas ClassInterfaceAttribute a uma assembleia, o atributo aplica-se a todas as classes na assembleia, a menos que as classes individuais sobreponham a definição com o seu próprio atributo.
Embora as interfaces de classe eliminem a tarefa de definir explicitamente interfaces para cada classe, a sua utilização em aplicações de produção é fortemente desencorajada. As interfaces de duas classes permitem que os clientes se associem a um layout de interface específico que pode ser alterado à medida que a classe evolui. Por exemplo, considere uma classe gerida que expõe uma interface de classe a clientes COM. A primeira versão da classe contém métodos North e South. Um cliente não gerido pode ligar-se à interface de classes, que fornece North como primeiro método na interface de classes e método South como segundo método. Agora considere a próxima versão da classe, que tem um novo método, East, inserido entre métodos North e South. Clientes não geridos que tentam ligar-se à nova classe através da antiga interface de classes acabam por chamar o método East quando pretendem chamar o método South, porque a posição dos métodos dentro da interface mudou. Além disso, qualquer alteração na disposição de uma classe base também afeta a disposição da interface de classes para todas as classes derivadas. Os clientes geridos, que se associam diretamente a classes, não apresentam os mesmos problemas de versionamento. Para diretrizes específicas sobre a utilização de uma interface de classe, consulte COM Callable Wrapper.
O Tlbimp.exe (Type Library Importer) aplica-se sempre às classes importadas o ClassInterfaceType.None membro de enumeração para indicar que as classes COM existentes nunca expõem interfaces geridas.
Construtores
| Name | Description |
|---|---|
| ClassInterfaceAttribute(ClassInterfaceType) |
Inicializa uma nova instância da ClassInterfaceAttribute classe com o membro de enumeração especificado ClassInterfaceType . |
| ClassInterfaceAttribute(Int16) |
Inicializa uma nova instância da ClassInterfaceAttribute classe com o valor de enumeração especificado ClassInterfaceType . |
Propriedades
| Name | Description |
|---|---|
| TypeId |
Quando implementado numa classe derivada, obtém um identificador único para esta Attribute. (Herdado de Attribute) |
| Value |
Obtém o ClassInterfaceType valor que descreve que tipo de interface deve ser gerada para a classe. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| GetHashCode() |
Devolve o código de hash para esta instância. (Herdado de Attribute) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsDefaultAttribute() |
Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute) |
| Match(Object) |
Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
Implementações de Interface Explícita
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho. (Herdado de Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface. (Herdado de Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). (Herdado de Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Proporciona acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute) |