Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
Часть V
Глава 16
Определение специальных пространств имен
Разрешение конфликтов имен с помощью полностью заданных имен
Разрешение конфликтов имен с помощью псевдонимов
Создание вложенных пространств имен
Изменение стандартного пространства имен в Visual Studio
Роль сборок .NET Core
Сборки содействуют многократному использованию кода
Сборки устанавливают границы типов
Сборки являются единицами, поддерживающими версии
Сборки являются самоописательными
Формат сборки .NET Core
Установка инструментов профилирования C++
Заголовок файла операционной системы (Windows)
Заголовок файла CLR
Код CIL, метаданные типов и манифест сборки
Дополнительные ресурсы сборки
Отличия между библиотеками классов и консольными приложениями
Отличия между библиотеками классов .NET Standard и .NET Core
Конфигурирование приложений
Построение и потребление библиотеки классов .NET Core
Исследование манифеста
Исследование кода CIL
Исследование метаданных типов
Построение клиентского приложения C#
Построение клиентского приложения Visual Basic
Межъязыковое наследование в действии
Открытие доступа к внутренним типам для других сборок
Использование атрибута assembly
Использование файла проекта
NuGet и .NET Core
Пакетирование сборок с помощью NuGet
Ссылка на пакеты NuGet
Опубликование консольных приложений (обновление в версии .NET 5)
Опубликование приложений, зависящих от инфраструктуры
Опубликование автономных приложений
Опубликование автономных приложений в виде единственного файла
Определение местонахождения сборок исполняющей средой .NET Core
Резюме
Глава 17
Потребность в метаданных типов
Просмотр (частичных) метаданных для перечисления EngineStateEnum
Просмотр (частичных) метаданных для типа Car
Исследование блока TypeRef
Документирование определяемой сборки
Документирование ссылаемых сборок
Документирование строковых литералов
Понятие рефлексии
Класс System.Туре
Получение информации о типе с помощью System.Object.GetType()
Получение информации о типе с помощью typeof()
Получение информации о типе с помощью System.Туре.GetType()
Построение специального средства для просмотра метаданных
Рефлексия методов
Рефлексия полей и свойств
Рефлексия реализованных интерфейсов
Отображение разнообразных дополнительных деталей
Добавление операторов верхнего уровня
Рефлексия статических типов
Рефлексия обобщенных типов
Рефлексия параметров и возвращаемых значений методов
Динамическая загрузка сборок
Рефлексия сборок инфраструктуры
Понятие позднего связывания
Класс System.Activato
Вызов методов без параметров
Вызов методов с параметрами
Роль атрибутов .NET
Потребители атрибутов
Применение атрибутов в C#
Сокращенная система обозначения атрибутов C#
Указание параметров конструктора для атрибутов
Атрибут [Obsolete] в действии
Построение специальных атрибутов
Применение специальных атрибутов
Синтаксис именованных свойств
Ограничение использования атрибутов
Атрибуты уровня сборки
Использование файла проекта для атрибутов сборки
Рефлексия атрибутов с использованием раннего связывания
Рефлексия атрибутов с использованием позднего связывания
Практическое использование рефлексии позднего связывания и специальных атрибутов
Построение расширяемого приложения
Построение мультипроектного решения ExtendableApp
Создание решения и проектов с помощью интерфейса командной строки
Добавление событий PostBuild в файлы проектов
Создание решения и проектов с помощью Visual Studio
Установка зависимостей проектов при компиляции
Добавление событий PostBuild
Построение сборки CommonSnappableTypes.dll
Построение оснастки на C#
Построение оснастки на Visual Basic
Добавление кода для ExtendableApp
Резюме
Глава 18
Роль ключевого слова dynamic языка C#
Вызов членов на динамически объявленных данных
Область использования ключевого слова dynamic
Ограничения ключевого слова dynamic
Практическое использование ключевого слова dynamic
Роль исполняющей среды динамического языка
Роль деревьев выражений
Динамический поиск в деревьях выражений во время выполнения
Упрощение вызовов с поздним связыванием посредством динамических типов
Использование ключевого слова dynamic для передачи аргументов
Упрощение взаимодействия с СОМ посредством динамических данных (только Windows)
Роль основных сборок взаимодействия
Встраивание метаданных взаимодействия
Общие сложности взаимодействия с СОМ
Взаимодействие с СОМ с использованием динамических данных C#
Резюме
Глава 19
Причины для изучения грамматики языка CIL
Директивы, атрибуты и коды операций CIL
Роль директив CIL
Роль атрибутов CIL
Роль кодов операций СIL
Разница между кодами операций и их мнемоническими эквивалентами в СIL
Заталкивание и выталкивание: основанная на стеке природа CIL
Возвратное проектирование
Роль меток в коде CIL
Взаимодействие c CIL: модификация файла *.il
Компиляция кода CIL
Директивы и атрибуты CIL
Указание ссылок на внешние сборки в CIL
Определение текущей сборки в CIL
Определение пространств имен в CIL
Определение типов классов в CIL
Определение и реализация интерфейсов в CIL
Определение структур в CIL
Определение перечислений в CIL
Определение обобщений в CIL
Компиляция файла CILTypes.il
Соответствия между типами данных в библиотеке базовых классов .NET Core, C# и CIL
Определение членов типов в CIL
Определение полей данных в CIL
Определение конструкторов типа в CIL
Определение свойств в CIL
Определение параметров членов
Исследование кодов операций CIL
Директива .maxstack
Объявление локальных переменных в CIL
Отображение параметров на локальные переменные в CIL
Скрытая ссылка this
Представление итерационных конструкций в CIL
Заключительные слова о языке CIL
Динамические сборки
Исследование пространства имен System.Reflection.Emit
Роль типа System.Reflection.Emit.ILGenerator
Выпуск динамической сборки
Выпуск сборки и набора модулей
Роль типа ModuleBuilder
Выпуск типа HelloClass и строковой переменной-члена