Создание настраиваемых атрибутов (руководство по программированию в C#)

Обновлен: Июль 2008

Можно создать собственные настраиваемые атрибуты, задав класс атрибутов, который явно или косвенно наследует от Attribute, что облегчает и ускоряет определение атрибутов в метаданных. Предположим, что необходимо пометить классы и структуры именем программиста, который создал класс или структуру. Можно задать класс настраиваемых атрибутов Author:

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}

В качестве имени класса используется имя атрибута Author. Он является производным от System.Attribute, следовательно, это класс настраиваемых атрибутов. Параметры конструктора являются позиционными параметрами настраиваемого атрибута, тогда name и все открытые для чтения и записи поля или свойства являются именованными параметрами, в этом случае единственным именованным параметром является version. Обратите внимание на то, что атрибут AttributeUsage используется для того, чтобы атрибут Author был действителен только для объявлений class и struct.

Новый атрибут можно использовать следующим образом:

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

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

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute
[Author("H. Ackerman", version = 1.1)]
[Author("M. Knott", version = 1.2)]
class SampleClass
{
    // H. Ackerman's code goes here...
    // M. Knott's code goes here...
}
sw480ze8.alert_note(ru-ru,VS.90).gifПримечание.

Если в классе атрибута содержится свойство, то оно должно быть доступно для чтения и записи. Свойства, доступные только для записи, не поддерживаются в классах атрибутов в C#.

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Отражение (Руководство по программированию на C#)

Атрибуты (Руководство по программированию на C#)

Использование атрибутов (Руководство по программированию на C#)

Устранение неоднозначностей в целевых объектах атрибутов (Руководство по программированию на C#)

Доступ к атрибутам через отражение (Руководство по программированию в C#)

System.Reflection

Журнал изменений

Дата

Журнал изменений

Причина

Июль 2008

Добавлено примечание о поддержке свойств.

Исправление ошибки содержимого.