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 ClassInterfaceType значению AutoDispatch , которое создает 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)

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

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