Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Отображение атрибутов при статическом связывании

Отображение атрибутов при статическом связывании

Как уже упоминалось в этой главе, атрибуты будут бесполезны до тех пор, пока некоторый фрагмент программного обеспечения не выполнит их отображение. После выявления атрибута соответствующий фрагмент программного обеспечения может выбрать подходящее действие. Как и само приложение, этот "фрагмент программного обеспечения" может для выявления пользовательского атрибута использовать статическое или динамическое связывание. Для статического связывания требуется, чтобы приложение-клиент к моменту компиляции уже имели определение соответствующего атрибута (в нашем случае это атрибут VehicleDescriptionAttribute). Компоновочный блок AttributedCarLibrary определяет пользовательский атрибут, как открытый класс, поэтому статическое связывание в данном случае будет наилучшим выбором.

Для иллюстрации процесса отображения пользовательских атрибутов создайте новое консольное приложение C# с именем VehicleDescriptionAttributeReader. Затем установите в нем ссылку на компоновочный блок AttributedCarLibrary. Наконец, поместите в исходный файл *.cs следующий программный код.

// Отображение пользовательских атрибутов при статическом связывании.
using System;
using AttributedCarLibrary;
public class Program {
 static void Main(string [] args) {
  // Получение Type для представления Winnebago.
  Type t = typeof(Winnebago);
  // Получение атрибутов Winnebago.
  object[] customAtts = t.GetCustomAttributes(false);
  // Печать описания.
  Console.WriteLine("*** Значение VehicleDescriptionAttribute ***n");
  foreach(VehicleDescriptionAtttibute v in customAtts) Console.WriteLine("-› {0}n", v.Description);
  Console.ReadLine();
 }
}

Как следует из самого названия, метод Type.GetCustomAttributes() возвращает массив объектов, представляющих все атрибуты, примененные тому к члену, который представлен с помощью Туре (логический параметр этого метода указывает, следует ли расширить поиск на всю цепочку наследования). После получения списка атрибутов выполняется цикл по всем классам VehicleDescriptionAttribute с выводом на печать значения, полученного свойством Description.

Исходный код. Проект VehicleDescriptionAttributeReader размещен в подкаталоге, соответствующем главе 12.

Оглавление книги


Генерация: 1.328. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз