Compartilhar via


Classe ClassInterfaceAttribute

 

Dica

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Indica o tipo de interface de classe a ser gerado para uma classe exposta ao COM, se uma interface for de fato gerada.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (em mscorlib.dll)

Hierarquia de Herança

System.Object
  System.Attribute
    System.Runtime.InteropServices.ClassInterfaceAttribute

Sintaxe

[AttributeUsageAttribute(AttributeTargets.Assembly | AttributeTargets.Class, 
    Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class ClassInterfaceAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Assembly | AttributeTargets::Class, 
    Inherited = false)]
[ComVisibleAttribute(true)]
public ref class ClassInterfaceAttribute sealed : Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Assembly | AttributeTargets.Class,
    Inherited = false)>]
[<ComVisibleAttribute(true)>]
type ClassInterfaceAttribute = 
    class
        inherit Attribute
    end
<AttributeUsageAttribute(AttributeTargets.Assembly Or AttributeTargets.Class,
    Inherited := False)>
<ComVisibleAttribute(True)>
Public NotInheritable Class ClassInterfaceAttribute
    Inherits Attribute

Construtores

Nome Descrição
System_CAPS_pubmethod ClassInterfaceAttribute(ClassInterfaceType)

Inicializa uma nova instância da classe ClassInterfaceAttribute com o membro de enumeração ClassInterfaceType especificado.

System_CAPS_pubmethod ClassInterfaceAttribute(Int16)

Inicializa uma nova instância da classe ClassInterfaceAttribute com o valor de enumeração ClassInterfaceType especificado.

Propriedades

Nome Descrição
System_CAPS_pubproperty TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.(Herdado de Attribute.)

System_CAPS_pubproperty Value

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

Métodos

Nome Descrição
System_CAPS_pubmethod Equals(Object)

Esta API dá suporte à infraestrutura produto e não se destina a ser usada diretamente do seu código. Retorna um valor que indica se essa instância é igual a um objeto especificado.(Herdado de Attribute.)

System_CAPS_pubmethod GetHashCode()

Retorna o código hash para essa instância.(Herdado de Attribute.)

System_CAPS_pubmethod GetType()

Obtém o Type da instância atual.(Herdado de Object.)

System_CAPS_pubmethod 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.)

System_CAPS_pubmethod 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.)

System_CAPS_pubmethod ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.(Herdado de Object.)

Implementações Explícitas da Interface

Nome Descrição
System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.(Herdado de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.(Herdado de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.GetTypeInfoCount(UInt32)

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.(Herdado de Attribute.)

Comentários

Você pode aplicar esse atributo para assemblies ou classes.

Esse atributo controla se o exportador da biblioteca (Tlbexp.exe) gera automaticamente uma interface de classe para a classe atribuída. Uma interface de classe recebe o mesmo nome de classe em si, mas o nome é prefixado com um sublinhado. Quando exposto, a interface de classe contém todas as public, não- static membros da classe gerenciada, incluindo membros herdados de sua classe base. Classes gerenciadas não é possível acessar uma interface de classe e não há necessidade de como eles podem acessar os membros de classe diretamente. TlbExp.exe gera um identificador exclusivo de interface (IID) para a interface de classe.

Interfaces de classe podem ser interfaces duplas ou somente de expedição. Opcionalmente, você pode suprimir a geração da interface de classe e fornecer uma interface personalizada em vez disso. Expor ou suprimir uma interface de classe, especificando um System.Runtime.InteropServices.ClassInterfaceType membro de enumeração. Quando você aplica ClassInterfaceAttribute para um assembly, o atributo referente a todas as classes do assembly, a menos que as classes individuais substituem a configuração com seu próprio atributo.

Embora as interfaces de classe eliminam a tarefa de definir explicitamente as interfaces para cada classe, seu uso em aplicativos de produção é altamente desaconselhável. Interfaces de classe dual permitem que clientes vincular a um layout de interface específica que está sujeita 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 gerenciados pode vincular a 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, Eastinserido entre os métodos North e South. Os clientes não gerenciados que tentarem associar a nova classe por meio da interface de classe antigo terminam chamando o método East quando eles pretendem chamar o método South, como 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 da classe para todas as classes derivadas. Gerenciado clientes, qual vincular diretamente para as classes, não exibem os mesmos problemas de controle de versão. Para obter diretrizes específicas sobre o uso de uma interface de classe, consulte COM Callable Wrapper.

O Tlbimp.exe (Importador de Biblioteca de Tipos) sempre se aplica a classes importados o ClassInterfaceType.None gerenciados de membro de enumeração para indicar que a existente COM classes nunca expor interfaces.

Exemplos

O exemplo a seguir mostra como aplicar o ClassInterfaceAttribute com o ClassInterfaceType valor AutoDispatch, que gera um IDispatch a interface para 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
using namespace System::Runtime::InteropServices;

[ClassInterface(ClassInterfaceType::AutoDispatch)]
public ref class MyClass
{
public:
   MyClass(){}

};

Informações de Versão

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1

Acesso thread-safe

Quaisquer membros estáticos públicos ( Compartilhado no Visual Basic) desse tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Confira Também

ClassInterfaceType
Namespace System.Runtime.InteropServices
Tlbexp.exe (Exportador de Biblioteca de Tipos)
Tlbimp.exe (Importador de Biblioteca de Tipos)

Retornar ao início