Sdílet prostřednictvím


– 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 ) ;
}
  

Viz také

Další zdroje

Abecedně řazená referenční dokumentace k atributům

Custom Attributes