Использование атрибутов для нормализации и валидации бизнес-сущностей Страница 4. Применение класса атрибутов
|
Страница 4 из 6
Что можно сделать с этим атрибутом? Применить к свойству! Давайте добавим псевдонимы к нескольким свойствам и напишем метод, который с помощью отражения получает список всех свойств объекта this и выводить на консоль их названия, и если у свойства есть DisplayNameAttribute, то вместо имени свойства выводится его псевдоним. public int ID ...
<b>[DisplayName("ФИО")]</b> public string Name ...
public string Resume ...
<b>[DisplayName("Дополнительная информация")]</b> public string ExtraInfo ...
public string Email ...
<b>[DisplayName("Дата Рождения")]</b> public DateTime Birthday ...
public int Sex ...
public ArrayList Language ...
/// <summary>
/// Отображает список имен свойств
/// </summary>
public void ShowNames() { IDictionary result = new Hashtable();
PropertyInfo[] pInfo = this.GetType().GetProperties();
for (int j=0; j<pInfo.Length; j++) { string _fieldName = pInfo[j].Name; Attribute dna = Attribute.GetCustomAttribute(pInfo[j], typeof(DisplayNameAttribute)); if (dna != null) _fieldName = ((DisplayNameAttribute)dna).Name;
Console.WriteLine("- " + _fieldName); } } }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread] static void Main(string[] args) { Person p = new Person(-1); <b>p.ShowNames();</b> Console.ReadLine(); ...
Мы получили то, что и нужно было получить, теперь у нас есть дружелюбное к пользователю название поля сущности. А что будет, если применить этот атрибут к одному свойству несколько раз? [DisplayName("ФИО")] [DisplayName("Имя")] public string Name { get { return m_Name;} set { m_Name = value;} } Из-за того, что мы не указали явно, что разрешаем несколько экземпляров этого атрибута для одного элемента (AllowMultiple=true) мы получим ошибку при компиляции: c:\csharp\consoleapplication1\consoleapplication1\class1.cs(56,3): error CS0579: Duplicate 'DisplayName' attribute |