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. Неуправляемые клиенты, которые пытаются выполнить привязку к новому классу через старый интерфейс класса, в конечном итоге вызывают метод 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)

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

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