Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Отображение атрибутов при динамическом связывании
Отображение атрибутов при динамическом связывании
В предыдущем примере использовалось статическое связывание и печатались данные описания для типа Winnebago. Это было возможно благодаря тому, что тип класса VehicleDescriptionAttribute был определен, как открытый член компоновочного блока AttributedCarLibrary. Но для отображения атрибутов можно также использовать динамическую загрузку и динамическое связывание.
Создайте новый консольный проект (VehicleDescriptionAttributeReaderLateBinding) и скопируйте AttributedCarLibrary.dll в каталог BinDebug этого проекта. Затем обновите метод Main() так, как предлагается ниже.
using System.Reflection;
namespace VehicleDescriptionAttributeReaderLateBinding {
class Program {
static void Main(string[] args) {
Console.WriteLine("*** Описания транспортных средств ***n");
// Загрузка локальной копии AttributedCarLibrагу.
Assembly asm = Assembly.Load(AttributedCarLibrary");
// Получение информации типа для VehicleDescriptionAttribute.
Type vehicleDesc = asm.GetType("AttributedCarLibrary.VehicleDescriptionAttribute");
// Получение информации типа для свойства Description.
PropertyInfо propDesc = vehicleDesc.GetProperty("Description");
// Получение всех типов данного компоновочного блока.
Туре[] types = asm.GetTypes();
// Получение VehicleDescriptionAttribute для каждого типа.
foreach (Type t in types) {
object[] objs = t.GetCustomAttributes(vehicleDesc, false);
// Итерации по VehicleDescriptionAttribute и печать
// описаний с динамическим связыванием.
foreach(object о in objs) {
Console.WriteLine("-› {0}: {1}n", t.Name, propDesc.GetValue(o, null));
}
}
Console.ReadLine();
}
}
}
Если вы внимательно анализировали все примеры этой главы, то листинг этого метода Main() должен быть для вас (более или менее) понятным. Единственным заслуживающим внимания моментом здесь является использование метода PropertyInfo.GetValue() для доступа к свойству. На рис. 12.10 показан соответствующий вывод.
Рис. 12.10. Отображение атрибутов при динамическом связывании
Исходный код. Проект VehiсleDescriptionAttributeReaderLateBinding размещен в подкаталоге, соответствующем главе 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* на дескрипторы файлов
- Отображение портов
- Отображение пользовательских имен