Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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.
- Метаданные типов
- Отображение типов в .NET
- Создание пользовательского приложения для просмотра метаданных
- Динамически загружаемые компоновочные блоки
- Отображение общедоступных компоновочных блоков
- Динамическое связывание
- Программирование с помощью атрибутов
- Создание пользовательских атрибутов
- Атрибуты уровня компоновочного блока (и уровня модуля)
- Отображение атрибутов при статическом связывании
- Отображение атрибутов при динамическом связывании
- Перспективы отображения, статического и динамического связывания и пользовательских атрибутов
- Создание расширяемого приложения
- Резюме
- Создание пользовательских атрибутов
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- 7. Унификация атрибутов
- 6.1.6. Отображение файлов
- Применение пользовательских атрибутов
- 19.2.1. Чтение и запись значений HTML-атрибутов
- Листинг 7.4. (print-environment.c) Отображение переменных среды процесса
- 7.12. Отображение структур и преобразование деревьев
- Типы атрибутов
- 4.4.2.1. Отображение переменных FILE* на дескрипторы файлов
- Отображение портов
- Отображение пользовательских имен