Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Финальная задача связана с отображением метаданных, предоставляемых атрибутом
[CompanyInfo]
DisplayCompanyData()
System.Туре
static void DisplayCompanyData(Type t)
{
// Получить данные [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 Language Runtime — DLR). После освоения служб, предлагаемых средой DLR, вы увидите примеры использования динамических типов для облегчения вызова методов с поздним связыванием (через службы рефлексии) и простого взаимодействия с унаследованными библиотеками СОМ.
На заметку! Не путайте ключевое слово
dynamic
dynamic
Роль ключевого слова dynamic языка C#
В главе 3 вы ознакомились с ключевым словом
var
Чтобы приступить к исследованию ключевого слова
dynamic
DynamicKeyword
Program
static void ImplicitlyTypedVariable()
{
// Переменная а имеет тип List<int>.
var a = new List<int> {90};
// Этот оператор приведет к ошибке на этапе компиляции!
// a = "Hello";