ClassInterfaceAttribute ClassInterfaceAttribute ClassInterfaceAttribute ClassInterfaceAttribute Class

Определение

Указывает, какой тип интерфейса класса должен генерироваться для класса, предоставленного модели COM, если интерфейс создан.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
Наследование
ClassInterfaceAttributeClassInterfaceAttributeClassInterfaceAttributeClassInterfaceAttribute
Атрибуты

Примеры

В следующем примере показано, как применить ClassInterfaceAttribute с ClassInterfaceType значение AutoDispatch, служащего для IDispatch интерфейс для 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

Комментарии

Этот атрибут можно применить сборки или классы.You can apply this attribute to assemblies or classes.

Этот атрибут управляет ли программа экспорта библиотек типов (Tlbexp.exe) автоматически создает интерфейс класса для класса с атрибутом.This attribute controls whether the Type Library Exporter (Tlbexp.exe) automatically generates a class interface for the attributed class. Интерфейс класса получает имя самого класса, но к имени добавляется префикс с символа подчеркивания.A class interface carries the same name as the class itself, but the name is prefixed with an underscore. Если он предоставлен, интерфейс класса содержит все public, не имеющие квалификатора- static члены управляемого класса, включая члены, унаследованные от базового класса.When exposed, the class interface contains all the public, non- static members of the managed class, including members inherited from its base class. Управляемые классы невозможно получить доступ к интерфейсу класса и не нужно, так как они напрямую к членам класса.Managed classes cannot access a class interface and have no need to as they can access the class members directly. Tlbexp.exe создает уникальный идентификатор интерфейса (IID) для интерфейса класса.Tlbexp.exe generates a unique interface identifier (IID) for the class interface.

Интерфейсы классов может быть сдвоенным или диспетчеризации интерфейсов.Class interfaces can be dual or dispatch-only interfaces. При необходимости можно отключить создание интерфейса класса и вместо этого предоставляют пользовательский интерфейс.Optionally, you can suppress the generation of the class interface and provide a custom interface instead. Предоставить или запретить интерфейс класса, указав System.Runtime.InteropServices.ClassInterfaceType член перечисления.You expose or suppress a class interface by specifying a System.Runtime.InteropServices.ClassInterfaceType enumeration member. При применении ClassInterfaceAttribute на сборку, этот атрибут относится ко всем классам в сборке, если отдельные классы переопределяют параметры собственным атрибутом.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.

Несмотря на то, что интерфейсы класса устраняют необходимость явного определения интерфейсов для каждого класса, их использование в рабочих приложениях настоятельно не рекомендуется.Although class interfaces eliminate the task of explicitly defining interfaces for each class, their use in production applications is strongly discouraged. Два класса интерфейсы позволяют клиентам выполнять привязку к определенному макету интерфейса, может меняться по мере развития класса.Dual class interfaces allow clients to bind to a specific interface layout that is subject to change as the class evolves. Например рассмотрим управляемый класс, предоставляющий интерфейс класса COM-клиентам.For example, consider a managed class that exposes a class interface to COM clients. Первая версия класс содержит методы North и South.The first version of the class contains methods North and South. Неуправляемый клиент можно привязать к интерфейсу класса, который предоставляет North как первый метод в интерфейсе класса и метод South как второй метод.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. Теперь рассмотрим следующей версии класса, который содержит новый метод, East, вставлено между этими методами North и South.Now consider the next version of the class, which has a new method, East, inserted between methods North and South. Неуправляемые клиенты, пытающиеся выполнить привязку к новому классу, используя старый интерфейс класса getexplicitdependencyproperties, метод East при вместо вызова метода South, так как изменилось положение методов в интерфейсе.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. Кроме того любые изменения макета базового класса также влияет на макет будет интерфейс класса для всех производных классов.Moreover, any change to the layout of a base class also affects the layout of the class interface for all derived classes. Управляемые клиенты, выполняющие привязку непосредственно к классам, не работают с подобными проблемами версий.Managed clients, which bind directly to classes, do not exhibit the same versioning problems. Инструкции по использованию интерфейса класса, см. в разделе вызываемая оболочка COM.For specific guidelines on using a class interface, see COM Callable Wrapper.

Tlbimp.exe (программа импорта библиотек типов) всегда относится к классам, импортированные ClassInterfaceType.None член перечисления, чтобы указать, что классы существующие COM не предоставляют управляемые интерфейсы.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.

Конструкторы

ClassInterfaceAttribute(ClassInterfaceType) ClassInterfaceAttribute(ClassInterfaceType) ClassInterfaceAttribute(ClassInterfaceType) ClassInterfaceAttribute(ClassInterfaceType)

Инициализирует новый экземпляр класса ClassInterfaceAttribute с указанным членом перечисления ClassInterfaceType.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration member.

ClassInterfaceAttribute(Int16) ClassInterfaceAttribute(Int16) ClassInterfaceAttribute(Int16) ClassInterfaceAttribute(Int16)

Инициализирует новый экземпляр класса ClassInterfaceAttribute с заданным значением перечисления ClassInterfaceType.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration value.

Свойства

TypeId TypeId TypeId TypeId

При реализации в производном классе возвращает уникальный идентификатор для этого Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)
Value Value Value Value

Возвращает значение ClassInterfaceType, описывающее тип интерфейса, который должен быть создать для класса.Gets the ClassInterfaceType value that describes which type of interface should be generated for the class.

Методы

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Возвращает значение, указывающее, равен ли этот экземпляр указанному объекту.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Возвращает хэш-код для данного экземпляра.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

При переопределении в производном классе показывает, является ли значение данного экземпляра значением по умолчанию для производного класса.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Явные реализации интерфейса

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые могут использоваться для получения сведений о типе интерфейса.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Применяется к

Дополнительно