Поделиться через


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 со значением 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)

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

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