ClassInterfaceAttribute Classe

Definição

Indica o tipo de interface de classe a ser gerado para uma classe exposta ao COM, se uma interface for de fato gerada.Indicates the type of class interface to be generated for a class exposed to COM, if an interface is generated at all.

public ref class ClassInterfaceAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ClassInterfaceAttribute : Attribute
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.The following example shows how to apply the ClassInterfaceAttribute with the ClassInterfaceType value AutoDispatch, which generates an IDispatch interface for 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.You can apply this attribute to assemblies or classes.

Esse atributo controla se o exportador da biblioteca de tipos (Tlbexp. exe) gera automaticamente uma interface de classe para a classe atribuída.This attribute controls whether the Type Library Exporter (Tlbexp.exe) automatically generates a class interface for the attributed class. Uma interface de classe contém o mesmo nome que a própria classe, mas o nome é prefixado com um sublinhado.A class interface carries the same name as the class itself, but the name is prefixed with an underscore. Quando exposto, a interface de classe contém todos publicos static não membros da classe gerenciada, incluindo membros herdados de sua classe base.When exposed, the class interface contains all the public, non- static members of the managed class, including members inherited from its base class. Classes gerenciadas não podem acessar uma interface de classe e não precisam, pois podem acessar diretamente os membros de classe.Managed classes cannot access a class interface and have no need to as they can access the class members directly. O Tlbexp. exe gera um IID (identificador de interface exclusivo) para a interface de classe.Tlbexp.exe generates a unique interface identifier (IID) for the class interface.

As interfaces de classe podem ser interfaces somente de expedição ou duplas.Class interfaces can be dual or dispatch-only interfaces. Opcionalmente, você pode suprimir a geração da interface de classe e fornecer uma interface personalizada em vez disso.Optionally, you can suppress the generation of the class interface and provide a custom interface instead. Você expõe ou suprimi uma interface de classe especificando um System.Runtime.InteropServices.ClassInterfaceType membro de enumeração.You expose or suppress a class interface by specifying a System.Runtime.InteropServices.ClassInterfaceType enumeration member. Quando você se ClassInterfaceAttribute aplica a um assembly, o atributo pertence a todas as classes no assembly, a menos que as classes individuais substituam a configuração por seu próprio atributo.When you apply ClassInterfaceAttribute to an assembly, the attribute pertains to all classes in the assembly unless the individual classes override the setting with their own attribute.

Embora as interfaces de classe eliminem a tarefa de definir explicitamente interfaces para cada classe, seu uso em aplicativos de produção é altamente desencorajado.Although class interfaces eliminate the task of explicitly defining interfaces for each class, their use in production applications is strongly discouraged. As interfaces de classe dual permitem que os clientes se associem a um layout de interface específico que está sujeito a alterações à medida que a classe evolui.Dual class interfaces allow clients to bind to a specific interface layout that is subject to change as the class evolves. Por exemplo, considere uma classe gerenciada que expõe uma interface de classe para clientes COM.For example, consider a managed class that exposes a class interface to COM clients. A primeira versão da classe contém métodos North e. SouthThe first version of the class contains methods North and 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 o South método como o segundo método.An unmanaged client can bind to the class interface, which provides North as the first method in the class interface and method South as the second method. Agora, considere a próxima versão da classe, que tem um novo método, East, inserido entre os North métodos Southe.Now consider the next version of the class, which has a new method, East, inserted between methods North and South. Clientes não gerenciados que tentam se associar à nova classe por meio da interface de classe antiga acaba chamando East o método quando pretendem Southchamar o método, pois o posicionamento dos métodos na interface foi alterado.Unmanaged clients that try to bind to the new class through the old class interface end up calling method East when they intend to call method South, because the positioning of methods within the interface has changed. 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.Moreover, any change to the layout of a base class also affects the layout of the class interface for all derived classes. Os clientes gerenciados, que se associam diretamente às classes, não exibem os mesmos problemas de controle de versão.Managed clients, which bind directly to classes, do not exhibit the same versioning problems. Para obter diretrizes específicas sobre como usar uma interface de classe, consulte com callable wrapper com.For specific guidelines on using a class interface, see COM Callable Wrapper.

O Tlbimp. exe (tipo de importador de biblioteca de tipos) sempre se ClassInterfaceType.None aplica às classes importadas o membro de enumeração para indicar que as classes com existentes nunca expõem interfaces gerenciadas.The Tlbimp.exe (Type Library Importer) always applies to imported classes the ClassInterfaceType.None enumeration member to indicate that existing COM classes never expose managed interfaces.

Construtores

ClassInterfaceAttribute(ClassInterfaceType)

Inicializa uma nova instância da classe ClassInterfaceAttribute com o membro de enumeração ClassInterfaceType especificado.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration member.

ClassInterfaceAttribute(Int16)

Inicializa uma nova instância da classe ClassInterfaceAttribute com o valor de enumeração ClassInterfaceType especificado.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration value.

Propriedades

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Herdado de Attribute)
Value

Obtém o valor ClassInterfaceType que descreve que tipo de interface deverá ser gerado para a classe.Gets the ClassInterfaceType value that describes which type of interface should be generated for the class.

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.Returns a value that indicates whether this instance is equal to a specified object.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para essa instância.Returns the hash code for this instance.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(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.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(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.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(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.Maps a set of names to a corresponding set of dispatch identifiers.

(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.Retrieves the type information for an object, which can be used to get the type information for an 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).Retrieves the number of type information interfaces that an object provides (either 0 or 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.Provides access to properties and methods exposed by an object.

(Herdado de Attribute)

Aplica-se a

Veja também