ClassInterfaceAttribute Třída

Definice

Určuje typ rozhraní třídy, které má být generováno pro třídu vystavenou modelu COM, pokud je rozhraní generováno vůbec.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
Dědičnost
ClassInterfaceAttribute
Atributy

Příklady

Následující příklad ukazuje, ClassInterfaceAttribute jak použít ClassInterfaceType s IDispatch hodnotou AutoDispatch, která generuje rozhraní pro 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

Poznámky

Tento atribut lze použít na sestavení nebo třídy.You can apply this attribute to assemblies or classes.

Tento atribut určuje, zda Exportér knihovny typů (Tlbexp. exe) automaticky generuje rozhraní třídy pro třídu s atributy.This attribute controls whether the Type Library Exporter (Tlbexp.exe) automatically generates a class interface for the attributed class. Rozhraní třídy má stejný název jako samotná třída, ale název je předponou podtržítka.A class interface carries the same name as the class itself, but the name is prefixed with an underscore. Pokud je vystaveno, rozhraní třídy obsahuje všechny public static členy spravované třídy, včetně členů zděděných z jeho základní třídy.When exposed, the class interface contains all the public, non- static members of the managed class, including members inherited from its base class. Spravované třídy nemůžou přistupovat k rozhraní třídy a nemusí se přistoupit, protože mají přímý přístup ke členům třídy.Managed classes cannot access a class interface and have no need to as they can access the class members directly. Tlbexp. exe vygeneruje jedinečný identifikátor rozhraní (IID) pro rozhraní třídy.Tlbexp.exe generates a unique interface identifier (IID) for the class interface.

Rozhraní třídy mohou být pouze duální nebo pouze pro odesílání.Class interfaces can be dual or dispatch-only interfaces. Volitelně můžete potlačit generování rozhraní třídy a místo toho zadat vlastní rozhraní.Optionally, you can suppress the generation of the class interface and provide a custom interface instead. Rozhraní třídy vystavíte nebo potlačíte zadáním System.Runtime.InteropServices.ClassInterfaceType členu výčtu.You expose or suppress a class interface by specifying a System.Runtime.InteropServices.ClassInterfaceType enumeration member. Při použití ClassInterfaceAttribute na sestavení se atribut vztahuje ke všem třídám v sestavení, pokud jednotlivé třídy přepisují nastavení s vlastním atributem.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.

I když rozhraní třídy eliminují úkol explicitního definování rozhraní pro každou třídu, jejich použití v produkčních aplikacích se důrazně nedoporučuje.Although class interfaces eliminate the task of explicitly defining interfaces for each class, their use in production applications is strongly discouraged. Rozhraní se dvěma třídami umožňují klientům vytvořit vazby na konkrétní rozložení rozhraní, které se může změnit, jakmile se třída vyvíjí.Dual class interfaces allow clients to bind to a specific interface layout that is subject to change as the class evolves. Zvažte například spravovanou třídu, která zveřejňuje rozhraní třídy pro klienty modelu COM.For example, consider a managed class that exposes a class interface to COM clients. První verze třídy obsahuje metody North a. SouthThe first version of the class contains methods North and South. Nespravovaný klient může vytvořit připojení k rozhraní třídy, které poskytuje North jako první metodu v rozhraní třídy a metodu South jako druhou metodu.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. Nyní zvažte další verzi třídy, která obsahuje novou metodu East, vloženou mezi metody North a South.Now consider the next version of the class, which has a new method, East, inserted between methods North and South. Nespravované klienty, kteří se snaží vytvořit vazby k nové třídě prostřednictvím starého rozhraní třídy koncovým voláním metody East , pokud mají v úmyslu zavolat metodu South, protože se změnilo umístění metod v rámci rozhraní.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. Kromě toho všechny změny rozložení základní třídy ovlivňují také rozložení rozhraní třídy pro všechny odvozené třídy.Moreover, any change to the layout of a base class also affects the layout of the class interface for all derived classes. Spravované klienty, kteří se vážou přímo na třídy, neprojeví stejné problémy se správou verzí.Managed clients, which bind directly to classes, do not exhibit the same versioning problems. Konkrétní pokyny k používání rozhraní třídy naleznete v tématu Obálka s odkazem na objekt com.For specific guidelines on using a class interface, see COM Callable Wrapper.

Tlbimp. exe (importér knihovny typů) se vždy vztahuje na importované třídy, ClassInterfaceType.None které člen výčtu označuje, že existující třídy com nikdy nezveřejňují spravovaná rozhraní.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.

Konstruktory

ClassInterfaceAttribute(ClassInterfaceType)

Inicializuje novou instanci ClassInterfaceAttribute třídy se zadaným ClassInterfaceType členem výčtu.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration member.

ClassInterfaceAttribute(Int16)

Inicializuje novou instanci ClassInterfaceAttribute třídy se zadanou ClassInterfaceType hodnotou výčtu.Initializes a new instance of the ClassInterfaceAttribute class with the specified ClassInterfaceType enumeration value.

Vlastnosti

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Zděděno od Attribute)
Value

ClassInterfaceType Získá hodnotu, která popisuje, který typ rozhraní by měl být vygenerován pro třídu.Gets the ClassInterfaceType value that describes which type of interface should be generated for the class.

Metody

Equals(Object)

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.Returns a value that indicates whether this instance is equal to a specified object.

(Zděděno od Attribute)
GetHashCode()

Vrátí kód hash této instance.Returns the hash code for this instance.

(Zděděno od Attribute)
GetType()

Type Získá aktuální instanci.Gets the Type of the current instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě označuje, zda je hodnota této instance výchozí hodnotou pro odvozenou třídu.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda je tato instance rovna zadanému objektu.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří kopii aktuálního Objectseznamu.Creates a shallow copy of the current Object.

(Zděděno od Object)
ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.Maps a set of names to a corresponding set of dispatch identifiers.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu pro objekt, který lze použít k získání informací o typu pro rozhraní.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.Provides access to properties and methods exposed by an object.

(Zděděno od Attribute)

Platí pro

Viz také