ClassInterfaceAttribute ClassInterfaceAttribute ClassInterfaceAttribute ClassInterfaceAttribute Class

Определение

Указывает, какой тип интерфейса класса должен генерироваться для класса, предоставленного модели COM, если интерфейс создан.Indicates the type of class interface to be generated for a class exposed to COM, if an interface is generated at all.

public ref class ClassInterfaceAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ClassInterfaceAttribute : Attribute
type ClassInterfaceAttribute = class
    inherit Attribute
Public NotInheritable Class ClassInterfaceAttribute
Inherits Attribute
Наследование
ClassInterfaceAttributeClassInterfaceAttributeClassInterfaceAttributeClassInterfaceAttribute
Атрибуты

Примеры

В следующем примере показано, как применить к ClassInterfaceAttribute IDispatch ClassInterfaceType значению AutoDispatch, которое создает интерфейс для MyClass.The following example shows how to apply the ClassInterfaceAttribute with the ClassInterfaceType value AutoDispatch, which generates an IDispatch interface for 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

Комментарии

Этот атрибут можно применить к сборкам или классам.You can apply this attribute to assemblies or classes.

Этот атрибут определяет, будет ли программа экспорта библиотек типов (Tlbexp. exe) автоматически создавать интерфейс класса для класса с атрибутами.This attribute controls whether the Type Library Exporter (Tlbexp.exe) automatically generates a class interface for the attributed class. Интерфейс класса содержит то же имя, что и сам класс, но имя имеет префикс подчеркивания.A class interface carries the same name as the class itself, but the name is prefixed with an underscore. При предоставлении доступа интерфейс класса содержит все public, static не являющиеся членами управляемого класса, включая члены, унаследованные от его базового класса.When exposed, the class interface contains all the public, non- static members of the managed class, including members inherited from its base class. Управляемые классы не могут получить доступ к интерфейсу класса и не должны иметь доступа, так как они могут напрямую обращаться к членам класса.Managed classes cannot access a class interface and have no need to as they can access the class members directly. Программа Tlbexp. exe создает уникальный идентификатор интерфейса (IID) для интерфейса класса.Tlbexp.exe generates a unique interface identifier (IID) for the class interface.

Интерфейсы класса могут быть сдвоенными или интерфейсами диспетчеризации.Class interfaces can be dual or dispatch-only interfaces. При необходимости можно подавить создание интерфейса класса и предоставить вместо этого пользовательский интерфейс.Optionally, you can suppress the generation of the class interface and provide a custom interface instead. Вы предоставляете или подавляете интерфейс класса, указывая System.Runtime.InteropServices.ClassInterfaceType элемент перечисления.You expose or suppress a class interface by specifying a System.Runtime.InteropServices.ClassInterfaceType enumeration member. При применении ClassInterfaceAttribute к сборке атрибут относится ко всем классам в сборке, если только отдельные классы не переопределяют параметр с собственным атрибутом.When you apply ClassInterfaceAttribute to an assembly, the attribute pertains to all classes in the assembly unless the individual classes override the setting with their own attribute.

Хотя интерфейсы классов устраняют задачу явного определения интерфейсов для каждого класса, их использование в рабочих приложениях настоятельно не рекомендуется.Although class interfaces eliminate the task of explicitly defining interfaces for each class, their use in production applications is strongly discouraged. Сдвоенные интерфейсы позволяют клиентам выполнять привязку к определенному макету интерфейса, который может быть изменен по мере развития класса.Dual class interfaces allow clients to bind to a specific interface layout that is subject to change as the class evolves. Например, рассмотрим управляемый класс, предоставляющий интерфейс класса клиентам COM.For example, consider a managed class that exposes a class interface to COM clients. Первая версия класса содержит методы North и. SouthThe first version of the class contains methods North and South. Неуправляемый клиент может выполнить привязку к интерфейсу класса, который North предоставляет первый метод в интерфейсе класса и методе South в качестве второго метода.An unmanaged client can bind to the class interface, which provides North as the first method in the class interface and method South as the second method. Теперь рассмотрим следующую версию класса, который содержит новый метод East, вставленный между методами North и South.Now consider the next version of the class, which has a new method, East, inserted between methods North and South. Неуправляемые клиенты, пытающиеся выполнить привязку к новому классу через старый интерфейс класса, вызывают вызывающий метод East , когда они намерены вызывать метод South, поскольку позиционирование методов в интерфейсе изменилось.Unmanaged clients that try to bind to the new class through the old class interface end up calling method East when they intend to call method South, because the positioning of methods within the interface has changed. Кроме того, любое изменение в макете базового класса также влияет на компоновку интерфейса класса для всех производных классов.Moreover, any change to the layout of a base class also affects the layout of the class interface for all derived classes. Управляемые клиенты, которые привязываются непосредственно к классам, не ведут к тем же проблемам управления версиями.Managed clients, which bind directly to classes, do not exhibit the same versioning problems. Конкретные рекомендации по использованию интерфейса класса см. в разделе вызываемая оболочка COM.For specific guidelines on using a class interface, see COM Callable Wrapper.

Средство Tlbimp. exe (программа импорта библиотек типов) всегда применяется к импортированным классам ClassInterfaceType.None , который указывает, что существующие COM-классы никогда не предоставляют управляемые интерфейсы.The Tlbimp.exe (Type Library Importer) always applies to imported classes the ClassInterfaceType.None enumeration member to indicate that existing COM classes never expose managed interfaces.

Конструкторы

ClassInterfaceAttribute(ClassInterfaceType) ClassInterfaceAttribute(ClassInterfaceType) ClassInterfaceAttribute(ClassInterfaceType) ClassInterfaceAttribute(ClassInterfaceType)

Инициализирует новый экземпляр класса ClassInterfaceAttribute с указанным членом перечисления ClassInterfaceType.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration member.

ClassInterfaceAttribute(Int16) ClassInterfaceAttribute(Int16) ClassInterfaceAttribute(Int16) ClassInterfaceAttribute(Int16)

Инициализирует новый экземпляр класса ClassInterfaceAttribute с заданным значением перечисления ClassInterfaceType.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration value.

Свойства

TypeId TypeId TypeId TypeId

При реализации в производном классе возвращает уникальный идентификатор для этого Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)
Value Value Value Value

Возвращает значение ClassInterfaceType, описывающее тип интерфейса, который должен быть создать для класса.Gets the ClassInterfaceType value that describes which type of interface should be generated for the class.

Методы

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Возвращает хэш-код данного экземпляра.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

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

Дополнительно