Udostępnij za pośrednictwem


atrybut

Umożliwia tworzenie atrybutu niestandardowego.

[ attribute(
   AllowOn,
   AllowMultiple=boolean,
   Inherited=boolean
) ]

Parametry

  • AllowOn
    Określa elementy języka, do których można zastosować atrybutu niestandardowego.Wartością domyślną jest System::AttributeTargets::All (zobacz System::AttributeTargets).

  • AllowMultiple
    Określa, czy atrybut niestandardowy można wielokrotnie stosować do konstrukcji.Wartością domyślną jest FALSE.

  • Inherited
    Wskazuje, czy atrybut ma być dziedziczone przez podklasy.Kompilator nie zapewnia specjalne obsługi tej funkcji; przestrzeganie tych informacji jest zadanie konsumentów atrybut (na przykład odbicia).Jeśli Inherited jest TRUE, atrybut jest dziedziczona.Jeśli AllowMultiple jest TRUE, atrybut gromadzone na komputerze członkowskim pochodnych; Jeśli AllowMultiple jest FALSE, atrybut będzie zastąpić (lub zastąpić) w dziedziczenia.Jeśli Inherited jest FALSE, atrybut nie będą dziedziczone.Wartością domyślną jest TRUE.

Uwagi

[!UWAGA]

attribute Atrybut jest teraz przestarzałe.Wspólne runtime atrybut language System.Attribute bezpośrednio umożliwia tworzenie attirbutes zdefiniowane przez użytkownika.Aby uzyskać więcej informacji, zobacz Atrybuty zdefiniowane przez użytkownika (C++ Component Extensions).

Można zdefiniować Niestandardowy atrybut przez umieszczenie attribute atrybut zarządzanych definicji klasy lub struktury.Nazwa klasy jest atrybutu niestandardowego.Na przykład:

[ attribute(Parameter) ]
public ref class MyAttr {};

Określa atrybut o nazwie MyAttr, które mogą być stosowane do parametrów funkcji.Tej klasy muszą być publiczne, jeśli atrybut ma być używane w innych zestawów.

[!UWAGA]

Aby uniknąć kolizji nazw, wszystkie nazwy atrybutu niejawnie kończyć "Atrybutu"; w tym przykładzie nazwa atrybutu i klasy jest rzeczywiście MyAttrAttribute, ale MyAttr i MyAttrAttribute mogą być używane zamiennie.

Publiczne konstruktory tej klasy zdefiniuj parametry nienazwane tego atrybutu.Konstruktory przeciążony Zezwalaj na wiele sposobów określania atrybutów, więc niestandardowy atrybut, który jest zdefiniowany w następujący sposób:

// 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

Dane publicznych członków i właściwości tej klasy są opcjonalne parametry nazwane atrybutu:

// 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 {};

Listę możliwych atrybut typy parametrów, zobacz Atrybuty niestandardowe.

Zobacz Atrybuty zdefiniowane przez użytkownika (C++ Component Extensions) do dyskusji na cele atrybutu.

attribute Ma atrybut AllowMultiple parametr, który określa, czy atrybut niestandardowy jest jednorazowego użytku lub multiuse (może występować więcej niż raz w tej samej jednostki).

// 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 {};

Niestandardowy atrybut klasy pochodzą bezpośrednio lub pośrednio z AttributeCollection, który ułatwia identyfikowanie definicji atrybutu w metadanych szybki i łatwy.attribute Atrybutu oznacza dziedziczenia z System::Attribute, więc nie jest konieczne jawne wyprowadzenie:

[ attribute(Class) ]
ref class MyAttr

jest odpowiednikiem

[ attribute(Class) ]
ref class MyAttr : System::Attribute   // OK, but redundant.

attributejest aliasem dla System.AttributeUsageAttribute (nie AttributeAttribute; jest to wyjątek od zasady nazewnictwa atrybut).

Wymagania

Atrybutu kontekstu

Stosuje się do

ref Klasa, ref struct

Powtarzalne

Nr

Wymagane atrybuty

Brak

Nieprawidłowe atrybuty

Brak

Aby uzyskać więcej informacji na temat kontekstów atrybutu, zobacz Kontekstów atrybutu.

Przykład

// 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 Nazwany argument określa, czy atrybut niestandardowy stosowane w klasie podstawowej pojawią się odbicia w klasie pochodnej.

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

Zobacz też

Inne zasoby

Atrybuty Alfabetyczne odniesienie

Custom Attributes