Именованный параметр поддерживается открытым полем или свойством, которое должно быть нестатическим и доступным только для записи. Любое поле или свойство подобного рода может автоматически использоваться в качестве именованного параметра. Значение присваивается именованному параметру с помощью соответствующего оператора, расположенного в списке аргументов при вызове конструктора атрибута. Ниже приведена общая форма объявления атрибута, включая именованные параметры.
Первыми указываются позиционные параметры, если они существуют. Далее следуют именованные параметры с присваиваемыми значениями. Порядок следования
именованных параметров особого значения не имеет. Именованным параметрам не обязательно присваивать значение, и в этом случае используется значение, устанавливаемое по умолчанию.
Применение именованного параметра лучше всего показать на конкретном примере. Ниже приведен вариант класса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 {
// ...
}