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


Определим атрибут, который будет определять отображаемое имя поля, как псевдоним. Для этого отнаследуемся от стандартного класса 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 (этот атрибут будет наследоваться)

 
Следующая статья »