Использование атрибутов для нормализации и валидации бизнес-сущностей - Создание класса атрибутов
ОГЛАВЛЕНИЕ
Определим атрибут, который будет определять отображаемое имя поля, как псевдоним. Для этого отнаследуемся от стандартного класса Attribute (в VS2005 это делается достаточно просто, "Insert snippet->attribute"). Определим строковое поле и конструктор, принимающий значение этого поля.
/// <summary>Обратите внимание, что мы добавили перед классом атрибут AttributeUsageAttribute, определяющий ряд важных параметров нашего атрибута.
/// Базовый класс-атрибут для определения отображаемого имени поля
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class DisplayNameAttribute : Attribute
{
string m_name = "";
/// <summary>
/// Отображаемое имя
/// </summary>
public virtual string Name
{
get {return m_name;}
}
public DisplayNameAttribute(string displayName)
{
m_name = displayName;
}
}
Вот что написано о AttributeUsageAttribute в MSDN:
При определении своего собственного класса атрибутов, можно управлять способом его использования путем размещения в нем AttributeUsageAttribute. Заданный класс атрибутов должен прямым или косвенным образом наследоваться из класса Attribute.
Классы атрибутов имеют позиционные и именованные параметры. Любой открытый конструктор для класса атрибутов определяет допустимую последовательность позиционных параметров для этого класса. Именованные параметры определяются нестатическими, открытыми и предназначенными для чтения и записи полями или свойствами класса атрибутов.
Три свойства AttributeUsageAttribute устанавливаются путем определения следующих параметров:
- ValidOn
Этот позиционный параметр определяет элементы программы, в которых может быть размещен указанный атрибут. Набор всех возможных элементов, в которых можно разместить атрибут, приведен в перечислении AttributeTargets. Можно объединить значения AttributeTargets при помощи битовой операции «OR» для получения требуемых сочетаний допустимых элементов программы.
- AllowMultiple
Этот именованный параметр определяет, может ли указанный атрибут определяться более одного раза для заданного элемента программы.
- Inherited
Этот именованный параметр определяет, может ли указанный атрибут наследоваться производными классами и переопределенными членами.
я указал AttributeTargets.Property, то есть данный атрибут может применяться только к свойствам, остальные параметры по умолчанию: AllowMultiple=false (этот атрибут может быть применен к свойству только 1 раз) и Inherited=true (этот атрибут будет наследоваться)