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