Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Specifikátory použití atributů umožňují zadat cíle atributů. Každý atribut je definován tak, aby se použil na určité prvky jazyka. Například atribut může být definován tak, aby se použil pouze na třídy a struktury. Následující seznam ukazuje možné syntaktické prvky, na kterých lze použít vlastní atribut. Můžete použít kombinace těchto hodnot (pomocí logického nebo).
Chcete-li určit cíl atributu, předat jeden nebo více AttributeTargets enumerátorů při AttributeUsageAttribute definování atributu.
Následuje seznam platných cílů atributů:
All(platí pro všechny konstrukce)using namespace System; [AttributeUsage(AttributeTargets::All)] ref class Attr : public Attribute {}; [assembly:Attr];Assembly(platí pro sestavení jako celek)using namespace System; [AttributeUsage(AttributeTargets::Assembly)] ref class Attr : public Attribute {}; [assembly:Attr];Module(platí pro modul jako celek)using namespace System; [AttributeUsage(AttributeTargets::Module)] ref class Attr : public Attribute {}; [module:Attr];Classusing namespace System; [AttributeUsage(AttributeTargets::Class)] ref class Attr : public System::Attribute {}; [Attr] // same as [class:Attr] ref class MyClass {};Structusing namespace System; [AttributeUsage(AttributeTargets::Struct)] ref class Attr : public Attribute {}; [Attr] // same as [struct:Attr] value struct MyStruct{};enumusing namespace System; [AttributeUsage(AttributeTargets::Enum)] ref class Attr : public Attribute {}; [Attr] // same as [enum:Attr] enum struct MyEnum{e, d};Constructorusing namespace System; [AttributeUsage(AttributeTargets::Constructor)] ref class Attr : public Attribute {}; ref struct MyStruct{ [Attr] MyStruct(){} // same as [constructor:Attr] };Methodusing namespace System; [AttributeUsage(AttributeTargets::Method)] ref class Attr : public Attribute {}; ref struct MyStruct{ [Attr] void Test(){} // same as [method:Attr] };Propertyusing namespace System; [AttributeUsage(AttributeTargets::Property)] ref class Attr : public Attribute {}; ref struct MyStruct{ [Attr] property int Test; // same as [property:Attr] };Fieldusing namespace System; [AttributeUsage(AttributeTargets::Field)] ref class Attr : public Attribute {}; ref struct MyStruct{ [Attr] int Test; // same as [field:Attr] };Eventusing namespace System; [AttributeUsage(AttributeTargets::Event)] ref class Attr : public Attribute {}; delegate void ClickEventHandler(int, double); ref struct MyStruct{ [Attr] event ClickEventHandler^ OnClick; // same as [event:Attr] };Interfaceusing namespace System; [AttributeUsage(AttributeTargets::Interface)] ref class Attr : public Attribute {}; [Attr] // same as [event:Attr] interface struct MyStruct{};Parameterusing namespace System; [AttributeUsage(AttributeTargets::Parameter)] ref class Attr : public Attribute {}; ref struct MyStruct{ void Test([Attr] int i); void Test2([parameter:Attr] int i); };Delegateusing namespace System; [AttributeUsage(AttributeTargets::Delegate)] ref class Attr : public Attribute {}; [Attr] delegate void Test(); [delegate:Attr] delegate void Test2();ReturnValueusing namespace System; [AttributeUsage(AttributeTargets::ReturnValue)] ref class Attr : public Attribute {}; ref struct MyStruct { // Note required specifier [returnvalue:Attr] int Test() { return 0; } };
Atribut obvykle přímo předchází elementu jazyka, na který se vztahuje. V některých případech však pozice atributu nestačí k určení zamýšleného cíle atributu. Podívejte se na tento příklad:
[Attr] int MyFn(double x)...
Syntakticky neexistuje způsob, jak zjistit, jestli se má atribut použít pro metodu nebo na návratovou hodnotu metody (v tomto případě je výchozí hodnotou metody). V takových případech lze použít specifikátor použití atributu. Pokud například chcete, aby se atribut použil na vrácenou hodnotu, použijte returnvalue specifikátor následujícím způsobem:
[returnvalue:Attr] int MyFn(double x)... // applies to return value
Specifikátory použití atributů jsou vyžadovány v následujících situacích:
Určení atributu na úrovni sestavení nebo modulu
Chcete-li určit, že atribut se vztahuje na návratovou hodnotu metody, nikoli metodu:
[method:Attr] int MyFn(double x)... // Attr applies to method [returnvalue:Attr] int MyFn(double x)...// Attr applies to return value [Attr] int MyFn(double x)... // default: methodChcete-li určit, že atribut se vztahuje na přístupové objekty vlastnosti, nikoli vlastnost:
[method:MyAttr(123)] property int Property() [property:MyAttr(123)] property int Property() [MyAttr(123)] property int get_MyPropy() // default: propertyChcete-li určit, že se atribut vztahuje na přístup události, nikoli událost:
delegate void MyDel(); ref struct X { [field:MyAttr(123)] event MyDel* MyEvent; //field [event:MyAttr(123)] event MyDel* MyEvent; //event [MyAttr(123)] event MyDel* MyEvent; // default: event }
Specifikátor použití atributu se vztahuje pouze na atribut, který bezprostředně následuje za ním; To je
[returnvalue:Attr1, Attr2]
liší se od
[returnvalue:Attr1, returnvalue:Attr2]
Příklad
Popis
Tato ukázka ukazuje, jak zadat více cílů.
Kód
using namespace System;
[AttributeUsage(AttributeTargets::Class | AttributeTargets::Struct, AllowMultiple = true )]
ref struct Attr : public Attribute {
Attr(bool i){}
Attr(){}
};
[Attr]
ref class MyClass {};
[Attr]
[Attr(true)]
value struct MyStruct {};