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
Атрибуты

Примеры

В следующем примере показано, как применить ClassInterfaceAttribute значениеAutoDispatch, ClassInterfaceType которое создает 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. Неуправляемые клиенты, которые пытаются привязаться к новому классу через старый интерфейс класса, в конечном итоге вызывают метод, когда они намерены вызвать метод EastSouth, так как расположение методов в интерфейсе изменилось. Кроме того, любое изменение макета базового класса также влияет на макет интерфейса класса для всех производных классов. Управляемые клиенты, которые привязываются непосредственно к классам, не демонстрируют одинаковые проблемы управления версиями. Конкретные рекомендации по использованию интерфейса класса см. в статье com Callable Wrapper.

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)

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

См. также раздел