// Получить данные [CompanyInfo].
var compInfo = t
.GetCustomAttributes(false)
.Where(ci => (ci is CompanyInfoAttribute));
// Отобразить данные.
foreach (CompanyInfoAttribute c in compInfo)
{
Console.WriteLine($"More info about {c.CompanyName}
can be found at {c.CompanyUrl}");
}
}
Наконец, модифицируйте операторы верхнего уровня следующим образом:
Console.WriteLine("***** Welcome to MyTypeViewer *****");
string typeName = "";
do
{
Console.WriteLine("\nEnter a snapin to load");
// Введите оснастку для загрузки
Console.Write("or enter Q to quit: ");
// или Q для завершения
// Получить имя типа.
typeName = Console.ReadLine();
// Желает ли пользователь завершить работу?
if (typeName.Equals("Q", StringComparison.OrdinalIgnoreCase))
{
break;
}
// Попытаться отобразить тип.
try
{
LoadExternalModule(typeName);
}
catch (Exception ex)
{
// Найти оснастку не удалось.
Console.WriteLine("Sorry, can't find snapin");
}
}
while (true);
На этом создание примера расширяемого приложения завершено. Вы смогли увидеть, что представленные в главе приемы могут оказаться весьма полезными, и их применение не ограничивается только разработчиками инструментов.
Резюме
Рефлексия является интересным аспектом надежной объектно - ориентированной среды. В мире .NET Core службы рефлексии вращаются вокруг класса System.Туре
System.Reflection. Вы видели, что рефлексия — это процесс помещения типа под "увеличительное стекло" во время выполнения с целью выяснения его характеристик и возможностей.Позднее связывание представляет собой процесс создания экземпляра типа и обращения к его членам без предварительного знания имен членов типа. Позднее связывание часто является прямым результатом динамической загрузки, которая позволяет программным образом загружать сборку .NET Core в память. На примере построения расширяемого приложения было продемонстрировано, что это мощный прием, используемый разработчиками инструментов, а также их потребителями.
Кроме того, в главе была исследована роль программирования на основе атрибутов. Снабжение типов атрибутами приводит к дополнению метаданных лежащей в основе сборки.
Глава 18
Динамические типы и среда DLR
В версии .NET 4.0 язык C# получил новое ключевое слово dynamic
В настоящей главе вы узнаете о ключевом слове dynamic и о том, как слабо типизированные вызовы отображаются на корректные объекты в памяти с применением
На заметку!
Не путайте ключевое словоdynamic языка C# с концепцией динамической сборки (объясняемой в главе 19). Хотя ключевое слово dynamic может применяться при построении динамической сборки, все же это две совершенно независимые концепции.Роль ключевого слова dynamic языка C#
В главе 3 вы ознакомились с ключевым словом var