Именованный параметр поддерживается открытым полем или свойством, которое должно быть нестатическим и доступным только для записи. Любое поле или свойство подобного рода может автоматически использоваться в качестве именованного параметра. Значение присваивается именованному параметру с помощью соответствующего оператора, расположенного в списке аргументов при вызове конструктора атрибута. Ниже приведена общая форма объявления атрибута, включая именованные параметры.

[attrib(список_позиционных_параметров,

мменованный_параметр_1=значение, именованный_параметр_2=значение,   ...)]

Первыми указываются позиционные параметры, если они существуют. Далее следуют именованные параметры с присваиваемыми значениями. Порядок следования

именованных параметров особого значения не имеет. Именованным параметрам не обязательно присваивать значение, и в этом случае используется значение, устанавливаемое по умолчанию.

Применение именованного параметра лучше всего показать на конкретном примере. Ниже приведен вариант классаRemarkAttribute,в который добавлено полеSupplement,предназначенное для хранения дополнительного примечания.

[AttributeUsage(AttributeTargets.All)] public class RemarkAttribute : Attribute {

string pri_remark; // базовое поле свойства Remark

// Это поле можно использовать в качестве именованного параметра, public string Supplement;

public RemarkAttribute(string comment) { pri_remark = comment;

Supplement = "Отсутствует";

}

public string Remark { get {

return pri_remark;

}

}

}

Как видите, полеSupplementинициализируется в конструкторе символьной строкой"Отсутствует".Другого способа присвоить ему первоначальное значение в конструкторе не существует. Но поскольку полеSupplementявляется открытым в классеRemarkAttribute,его можно использовать в качестве именованного параметра, как показано ниже.

[RemarkAttribute("В этом классе используется атрибут.",

Supplement = "Это дополнительная информация.")] class UseAttrib {

// ...

}

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

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