ClassInterfaceAttribute Classe

Definição

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
ClassInterfaceAttribute
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)

Aplica-se a

Ver também