– atribut
Umožňuje vytvořit vlastní atribut.
[ attribute(
AllowOn,
AllowMultiple=boolean,
Inherited=boolean
) ]
Parametry
AllowOn
Určuje prvky jazyka, které lze použít vlastní atribut.Výchozí hodnota je System::AttributeTargets::All (viz System::AttributeTargets).AllowMultiple
Určuje, zda vlastní atribut lze použít opakovaně konstrukt.Výchozí hodnota je FALSE.Inherited
Označuje, zda má být zděděny podtřídami atribut.Kompilátor podporuje žádné zvláštní funkce; je úloha atribut spotřebitelů (například odraz) s ohledem na tyto informace.Pokud Inherited je TRUE, je zděděna atribut.Pokud AllowMultiple je TRUE, bude atribut nahromadit na odvozené člena; Pokud AllowMultiple je FALSE, atribut bude přepsat (nebo nahradit) v dědičnosti.Pokud Inherited je FALSE, atribut bude nezděděné.Výchozí hodnota je TRUE.
Poznámky
[!POZNÁMKA]
attribute Atribut nyní nepoužívá.Společné language runtime atributu typu System.Attribute přímo použijte k vytvoření uživatelem definované attirbutes.Další informace naleznete v tématu Uživatelsky definované atributy (rozšíření komponent C++).
Definování Vlastní atribut umístěním attribute atribut na spravované definici třídy nebo struct.Název třídy je vlastní atribut.Příklad:
[ attribute(Parameter) ]
public ref class MyAttr {};
definuje atribut nazvaný MyAttr, který lze aplikovat na parametry funkce.Třída musí být veřejné, pokud atribut použít v ostatních sestaveních.
[!POZNÁMKA]
Chcete-li zabránit kolizím názvů všech názvů atributů implicitně končit "Atribut"; v tomto příkladu je název atributu a třída skutečně MyAttrAttribute, ale MyAttr a MyAttrAttribute jsou zaměnitelné.
Veřejné konstruktory třídy definování atributu nepojmenované parametry.Přetížená konstruktory povolit více způsoby zadání atributu, tak vlastní atribut, který je definován takto:
// cpp_attr_ref_attribute.cpp
// compile with: /c /clr
using namespace System;
[ attribute(AttributeTargets::Class) ] // apply attribute to classes
public ref class MyAttr {
public:
MyAttr() {} // Constructor with no parameters
MyAttr(int arg1) {} // Constructor with one parameter
};
[MyAttr]
ref class ClassA {}; // Attribute with no parameters
[MyAttr(123)]
ref class ClassB {}; // Attribute with one parameter
Veřejné datové členy třídy a vlastnosti jsou volitelné parametry s názvem atributu:
// cpp_attr_ref_attribute_2.cpp
// compile with: /c /clr
using namespace System;
[ attribute(AttributeTargets::Class) ]
ref class MyAttr {
public:
// Property Priority becomes attribute's named parameter Priority
property int Priority {
void set(int value) {}
int get() { return 0;}
}
// Data member Version becomes attribute's named parameter Version
int Version;
MyAttr() {} // constructor with no parameters
MyAttr(int arg1) {} // constructor with one parameter
};
[MyAttr(123, Version=2)]
ref class ClassC {};
Seznam možných atributů typy parametrů naleznete v tématu Vlastní atributy.
Viz Uživatelsky definované atributy (rozšíření komponent C++) pro diskusi o cílech atribut.
attribute Atribut má AllowMultiple parametr, který určuje, zda je vlastní atribut jedno použití nebo multiuse (může být zobrazena vícekrát na stejnou entitu).
// cpp_attr_ref_attribute_3.cpp
// compile with: /c /clr
using namespace System;
[ attribute(AttributeTargets::Class, AllowMultiple = true) ]
ref struct MyAttr {
MyAttr(){}
}; // MyAttr is a multiuse attribute
[MyAttr, MyAttr()]
ref class ClassA {};
Vlastní atribut třídy jsou odvozeny přímo nebo nepřímo z #ctor, které umožňuje identifikaci definice atributu v metadatech rychlé a snadné.attribute Atributu znamená dědičnost z System::Attribute, proto není nezbytné explicitní odvození:
[ attribute(Class) ]
ref class MyAttr
je ekvivalentní
[ attribute(Class) ]
ref class MyAttr : System::Attribute // OK, but redundant.
attributeje alias AttributeUsageAttribute (není AttributeAttribute; Toto je výjimka pravidla pojmenování atributu).
Požadavky
Atribut kontextu
V aplikacích |
ref Třída, ref struct |
Opakovatelné |
Ne |
Požadované atributy |
Žádná |
Neplatné atributy |
Žádná |
Další informace o kontextech atribut, viz Kontexty atribut.
Příklad
// cpp_attr_ref_attribute_4.cpp
// compile with: /c /clr
using namespace System;
[attribute(AttributeTargets::Class)]
ref struct ABC {
ABC(Type ^) {}
};
[ABC(String::typeid)] // typeid operator yields System::Type ^
ref class MyClass {};
Inherited Pojmenovaný argument určuje, zda vlastní atribut v základní třídě zobrazí na rozmyšlenou odvozené třídy.
// cpp_attr_ref_attribute_5.cpp
// compile with: /clr
using namespace System;
using namespace System::Reflection;
[attribute( AttributeTargets::Method, Inherited=false )]
ref class BaseOnlyAttribute { };
[attribute( AttributeTargets::Method, Inherited=true )]
ref class DerivedTooAttribute { };
ref struct IBase {
public:
[BaseOnly, DerivedToo]
virtual void meth() {}
};
// Reflection on Derived::meth will show DerivedTooAttribute
// but not BaseOnlyAttribute.
ref class Derived : public IBase {
public:
virtual void meth() override {}
};
int main() {
IBase ^ pIB = gcnew Derived;
MemberInfo ^ pMI = pIB->GetType( )->GetMethod( "meth" );
array<Object ^> ^ pObjs = pMI->GetCustomAttributes( true );
Console::WriteLine( pObjs->Length ) ;
}