ClassInterfaceAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, какой тип интерфейса класса должен генерироваться для класса, предоставленного модели COM, если интерфейс создан.
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
- Наследование
- Атрибуты
Примеры
В следующем примере показано, как применить ClassInterfaceAttribute со значением AutoDispatchClassInterfaceType , которое создает IDispatch
интерфейс для 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
Комментарии
Этот атрибут можно применять к сборкам или классам.
Этот атрибут определяет, будет ли средство экспорта библиотек типов (Tlbexp.exe) автоматически создавать интерфейс класса для класса с атрибутами. Интерфейс класса имеет то же имя, что и сам класс, но имя имеет префикс подчеркивания. При его использовании интерфейс класса содержит все public
, не являющиеся static
членами управляемого класса, включая члены, унаследованные от его базового класса. Управляемые классы не могут получить доступ к интерфейсу класса и не имеют необходимости, так как они могут обращаться к членам класса напрямую. Tlbexp.exe создает уникальный идентификатор интерфейса (IID) для интерфейса класса.
Интерфейсы классов могут быть двойными интерфейсами или интерфейсами только для диспетчеризации. При необходимости можно отключить создание интерфейса класса и предоставить пользовательский интерфейс. Вы предоставляете или подавляете интерфейс класса, указывая System.Runtime.InteropServices.ClassInterfaceType член перечисления. При применении ClassInterfaceAttribute к сборке атрибут относится ко всем классам в сборке, если только отдельные классы не переопределяют параметр собственным атрибутом.
Хотя интерфейсы классов устраняют задачу явного определения интерфейсов для каждого класса, их использование в рабочих приложениях настоятельно не рекомендуется. Интерфейсы двойного класса позволяют клиентам выполнять привязку к определенному макету интерфейса, который может изменяться по мере развития класса. Например, рассмотрим управляемый класс, который предоставляет интерфейс класса com-клиентам. Первая версия класса содержит методы North
и South
. Неуправляемый клиент может привязаться к интерфейсу класса, который предоставляет North
в качестве первого метода в интерфейсе класса и метод South
в качестве второго метода. Теперь рассмотрим следующую версию класса , которая содержит новый метод , East
вставленный между методами North
и South
. Неуправляемые клиенты, которые пытаются выполнить привязку к новому классу через старый интерфейс класса, в конечном итоге вызывают метод East
, когда они намерены вызвать метод South
, так как расположение методов в интерфейсе изменилось. Кроме того, любое изменение макета базового класса также влияет на макет интерфейса класса для всех производных классов. Управляемые клиенты, которые привязываются непосредственно к классам, не демонстрируют одинаковые проблемы управления версиями. Конкретные рекомендации по использованию интерфейса класса см. в разделе Вызываемая оболочка COM.
Tlbimp.exe (средство импорта библиотек типов) всегда применяется к импортированным классамClassInterfaceType.None, членам перечисления, чтобы указать, что существующие COM-классы никогда не предоставляют управляемые интерфейсы.
Конструкторы
ClassInterfaceAttribute(ClassInterfaceType) |
Инициализирует новый экземпляр класса ClassInterfaceAttribute с указанным членом перечисления ClassInterfaceType. |
ClassInterfaceAttribute(Int16) |
Инициализирует новый экземпляр класса ClassInterfaceAttribute с заданным значением перечисления ClassInterfaceType. |
Свойства
TypeId |
В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute. (Унаследовано от Attribute) |
Value |
Возвращает значение ClassInterfaceType, описывающее тип интерфейса, который должен быть создать для класса. |
Методы
Equals(Object) |
Возвращает значение, показывающее, равен ли экземпляр указанному объекту. (Унаследовано от Attribute) |
GetHashCode() |
Возвращает хэш-код данного экземпляра. (Унаследовано от Attribute) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
IsDefaultAttribute() |
При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса. (Унаследовано от Attribute) |
Match(Object) |
При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту. (Унаследовано от Attribute) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса. (Унаследовано от Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к открытым свойствам и методам объекта. (Унаследовано от Attribute) |