ClassInterfaceAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Indica o tipo de interface de classe a ser gerado para uma classe exposta ao COM, se uma interface for de fato 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 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 da Biblioteca de Tipos (Tlbexp.exe) gera automaticamente uma interface de classe para a classe atribuída. Uma interface de classe carrega o mesmo nome que a própria classe, mas o nome é prefixado com um sublinhado. Quando exposta, a interface de classe contém todos os public
membros , não membros static
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, pois podem 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 é fortemente 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, East
, inserido 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 Wrapper Callable COM.
O Tlbimp.exe (Importador de 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
ClassInterfaceAttribute(ClassInterfaceType) |
Inicializa uma nova instância da classe ClassInterfaceAttribute com o membro de enumeração ClassInterfaceType especificado. |
ClassInterfaceAttribute(Int16) |
Inicializa uma nova instância da classe ClassInterfaceAttribute com o valor de enumeração ClassInterfaceType especificado. |
Propriedades
TypeId |
Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute) |
Value |
Obtém o valor ClassInterfaceType que descreve que tipo de interface deverá ser gerado para a classe. |
Métodos
Equals(Object) |
Retorna um valor que indica se essa instância é igual a um objeto especificado. (Herdado de Attribute) |
GetHashCode() |
Retorna o código hash para a 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 Object atual. (Herdado de Object) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Implantações explícitas de interface
_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 para um objeto, que pode ser usado para obter as informações de tipo para 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) |