Использование атрибутов для нормализации и валидации бизнес-сущностей - Создание класса атрибутов

ОГЛАВЛЕНИЕ

Определим атрибут, который будет определять отображаемое имя поля, как псевдоним. Для этого отнаследуемся от стандартного класса Attribute (в VS2005 это делается достаточно просто, "Insert snippet->attribute"). Определим строковое поле и конструктор, принимающий значение этого поля.

/// <summary>

/// Базовый класс-атрибут для определения отображаемого имени поля

/// </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, определяющий ряд важных параметров нашего атрибута.
Вот что написано о AttributeUsageAttribute в MSDN:

При определении своего собственного класса атрибутов, можно управлять способом его использования путем размещения в нем AttributeUsageAttribute. Заданный класс атрибутов должен прямым или косвенным образом наследоваться из класса Attribute.
Классы атрибутов имеют позиционные и именованные параметры. Любой открытый конструктор для класса атрибутов определяет допустимую последовательность позиционных параметров для этого класса. Именованные параметры определяются нестатическими, открытыми и предназначенными для чтения и записи полями или свойствами класса атрибутов.
Три свойства AttributeUsageAttribute устанавливаются путем определения следующих параметров:
- ValidOn
Этот позиционный параметр определяет элементы программы, в которых может быть размещен указанный атрибут. Набор всех возможных элементов, в которых можно разместить атрибут, приведен в перечислении AttributeTargets. Можно объединить значения AttributeTargets при помощи битовой операции «OR» для получения требуемых сочетаний допустимых элементов программы.
- AllowMultiple
Этот именованный параметр определяет, может ли указанный атрибут определяться более одного раза для заданного элемента программы.
- Inherited
Этот именованный параметр определяет, может ли указанный атрибут наследоваться производными классами и переопределенными членами.

я указал AttributeTargets.Property, то есть данный атрибут может применяться только к свойствам, остальные параметры по умолчанию: AllowMultiple=false (этот атрибут может быть применен к свойству только 1 раз) и Inherited=true (этот атрибут будет наследоваться)