Как только класс атрибута будет определен, атрибут можно присоединить к элементу. Атрибут указывается перед тем элементом, к которому он присоединяется, и для этого его конструктор заключается в квадратные скобки. В качестве примера ниже показано, как атрибутRemarkAttributeсвязывается с классом.

[RemarkAttribute("В этом классе используется атрибут.")] class UseAttrib {

// ...

}

В этом фрагменте кода конструируется атрибутRemarkAttribute,содержащий комментарий"В этом классе используется атрибут .11 Данный атрибут затем связывается с классом UseAttrib.

Присоединяя атрибут, совсем не обязательно указывать суффиксAttribute.Например, приведенный выше класс может быть объявлен следующим образом.

[Remark("В этом классе используется атрибут.")] class UseAttrib {

// . . .

}

В этом объявлении указывается только имяRemark.Такая сокращенная форма считается вполне допустимой, но все же надежнее указывать полное имя присоединяемого атрибута, чтобы избежать возможной путаницы и неоднозначности.

Получение атрибутов объекта

Как только атрибут будет присоединен к элементу, он может быть извлечен в других частях программы. Для извлечения атрибута обычно используется один из двух методов. Первый метод,GetCustomAttributes (), определяется в классеMemberlnfои наследуется классомТуре.Он извлекает список всех атрибутов, присоединенных к элементу. Ниже приведена одна из его форм.

object[] GetCustomAttributes(boolнаследование)

Еслинаследованиеимеет логическое значениеtrue,то в список включаются атрибуты всех базовых классов, наследуемых по иерархической цепочке. В противном случае атрибуты извлекаются только из тех классов, которые определяются указанным типом.

Второй метод,GetCustomAttribute (), определяется в классеAttribute.Ниже приведена одна из его форм:

static Attribute GetCustomAttribute(Memberlnfоэлемент,Туретип_атрибута)

гдеэлементобозначает объект классаMember Inf о,описывающий тот элемент, для которого создаются атрибуты, тогда кактип_атрибута— требуемый атрибут. Данный метод используется в том случае, еслицмяполучаемого атрибута известно заранее, что зачастую и бывает. Так, если в классеUseAttribимеется атрибутRemarkAttribute,то для получения ссылки на этот атрибут можно воспользоваться следующей последовательностью кода.

// Получить экземпляр объекта класса MemberInfо, связанного // с классом, содержащим атрибут RemarkAttribute.

Type t = typeof(UseAttrib);

// Извлечь атрибут RemarkAttribute.

Type tRemAtt = typeof(RemarkAttribute);

RemarkAttribute ra = (RemarkAttribute)

Attribute.GetCustomAttribute(t, tRemAtt);

Перейти на страницу:

Похожие книги