Поделиться через


атрибут

Позволяет создать настраиваемый атрибут.

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

Параметры

  • AllowOn
    Определяет элементы языка, к которым настраиваемый атрибут можно применить. Значение по умолчанию System:: AttributeTargets:: Все (см. System:: AttributeTargets).

  • AllowMultiple
    Определяет, является ли настраиваемый атрибут может быть применен к конструкции повторно. Значение по умолчанию False.

  • Inherited
    Указывает ли атрибут быть унаследованным подклассами. Компилятор не предоставляет никаких специальную поддержку этой функциональности; задание объектов-получателей атрибута (отражения, например учитывать эти сведения. If Inherited существует Trueатрибут унаследован. If AllowMultiple существует Trueатрибут накапливает в производном элементе; If AllowMultiple существует Falseатрибут переопределяет (или заменить) в наследовании. If Inherited существует Falseатрибут не является унаследованным. Значение по умолчанию True.

Заметки

Примечание

attribute атрибут теперь нерекомендуем.Используйте атрибут System.Attribute среды CLR в непосредственно для создания определяемых пользователем attirbutes.Дополнительные сведения см. в разделе Пользовательские атрибуты (расширения компонентов C++).

Указании a настраиваемый атрибут устанавливая attribute атрибут управляемом определении класса или структуры. Имя класса настраиваемого атрибута. Примеры.

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

определяет атрибут с именем MyAttr, которое можно применять для функционирования параметры. Класс должен быть открытым, если атрибут планируется использовать в других сборках.

Примечание

Во избежание конфликтов пространств имен, все имена атрибутов явно заканчивается на "атрибутом"; в этом примере имя атрибута и класс, но фактически MyAttrAttribute MyAttr и MyAttrAttribute можно использовать взаимозаменимо.

Открытые конструкторы типа задают параметры атрибута неименованные. Перегруженные конструкторы предоставляют различные способы указания атрибута, чтобы настраиваемый атрибут, который определен следующим образом:

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

Элементы данных и открытые свойства типа с именем необязательно атрибута параметрами:

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

Список возможных типов параметров атрибутов см. в разделе Пользовательские атрибуты.

См. Пользовательские атрибуты (расширения компонентов C++) обсуждение в целевых объектах атрибута.

attribute атрибут имеющий AllowMultiple параметр, который определяет, является ли настраиваемый атрибут одна использование или multiuse (может появляться более одного раза в одну и ту же сущность).

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

Классы настраиваемого атрибута получаются напрямую или косвенно от #ctor, который упрощает определение определения атрибута в метаданных легко и быстро. attribute атрибут указывает наследование из system:: Точный атрибут, поэтому вывод не требуются.

[ attribute(Class) ]
ref class MyAttr

, эквивалентно выражению

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

attribute псевдоним AttributeUsageAttribute (не AttributeAttribute; это исключением из правила именования атрибута).

Требования

Контекст атрибута

Применение

ref класс" структура ref

Repeatable

Нет

Обязательные атрибуты

None

Недопустимые атрибуты

None

Дополнительные сведения о контекстах атрибута см. в разделе Контексты атрибута.

Пример

// 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 именованные аргументы определяют, будет ли настраиваемый атрибут, примененный в базовом классе вверх на отражении производного класса.

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

См. также

Другие ресурсы

Алфавитный указатель атрибутов

Custom Attributes