ClassInterfaceAttribute Classe

Definição

Indica o tipo de interface de classe a ser gerado para uma classe exposta ao COM, se uma interface for 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 a seguir 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

Comentários

Você pode aplicar esse atributo a assemblies ou classes.

Esse atributo controla se o Exportador de Biblioteca de Tipos (Tlbexp.exe) gera automaticamente uma interface de classe para a classe atribuída. Uma interface de classe carrega o mesmo nome da própria classe, mas o nome é prefixado com um sublinhado. Quando exposta, a interface de classe contém todos os publicstatic membros não membros da classe gerenciada, incluindo membros herdados de sua classe base. As classes gerenciadas não podem acessar uma interface de classe e não precisam acessar os membros da classe diretamente. Tlbexp.exe gera um IID (identificador de interface) exclusivo para a interface de classe.

As interfaces de classe podem ser interfaces somente de expedição ou duplas. Opcionalmente, você pode suprimir a geração da interface de classe e fornecer uma interface personalizada. Você expõe ou suprime uma interface de classe especificando um System.Runtime.InteropServices.ClassInterfaceType membro de enumeração. Quando você aplica ClassInterfaceAttribute a um assembly, o atributo pertence a todas as classes no assembly, a menos que as classes individuais substituam a configuração com seu próprio atributo.

Embora as interfaces de classe eliminem a tarefa de definir explicitamente interfaces para cada classe, seu uso em aplicativos de produção é altamente desencorajado. Interfaces de classe dupla permitem que os clientes se associem a um layout de interface específico que está sujeito a alterações à medida que a classe evolui. Por exemplo, considere uma classe gerenciada que expõe uma interface de classe para clientes COM. A primeira versão da classe contém métodos North e South. Um cliente não gerenciado pode se associar à interface de classe, que fornece North como o primeiro método na interface de classe e método South como o segundo método. Agora considere a próxima versão da classe, que tem um novo método, Eastinserida entre métodos North e South. Clientes não gerenciados que tentam associar à nova classe por meio da interface de classe antiga acabam chamando o método East quando pretendem chamar o método South, porque o posicionamento dos métodos dentro da interface foi alterado. Além disso, qualquer alteração no layout de uma classe base também afeta o layout da interface de classe para todas as classes derivadas. Os clientes gerenciados, que se associam diretamente às classes, não exibem os mesmos problemas de controle de versão. Para obter diretrizes específicas sobre como usar uma interface de classe, consulte COM Callable Wrapper.

O Tlbimp.exe (Importador da Biblioteca de Tipos) sempre se aplica às classes importadas que o ClassInterfaceType.None membro de enumeração indica que as classes COM existentes nunca expõem interfaces gerenciadas.

Construtores

Nome 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

Nome Description
TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse Attribute.

(Herdado de Attribute)
Value

Obtém o ClassInterfaceType valor que descreve qual tipo de interface deve ser gerado para a classe.

Métodos

Nome Description
Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Devolve o código hash para esta instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo de um objeto, que podem ser usadas para obter as informações de tipo de uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a

Confira também