Язык программирования C#9 и платформа .NET5
- Автор: Эндрю Троелсен
- Жанр: Базы данных
- Дата выхода: 2022
Читать книгу "Язык программирования C#9 и платформа .NET5" полностью
Удаление целей из списка вызовов делегата
Синтаксис групповых преобразований методов
Понятие обобщенных делегатов
Обобщенные делегаты Action<> и Func<>
Понятие событий C#
Ключевое слово event
"За кулисами" событий
Прослушивание входящих событий
Упрощение регистрации событий с использованием Visual Studio
Создание специальных аргументов событий
Обобщенный делегат EventHandler<T>
Понятие анонимных методов C#
Доступ к локальным переменным
Использование ключевого слова static с анонимными методами (нововведение в версии 9.0)
Использование отбрасывания с анонимными методами (нововведение в версии 9.0)
Понятие лямбда-выражений
Анализ лямбда-выражения
Обработка аргументов внутри множества операторов
Лямбда-выражения с несколькими параметрами и без параметров
Использование ключевого слова static с лямбда-выражениями (нововведение в версии 9.0)
Использование отбрасывания с лямбда-выражениями (нововведение в версии 9.0)
Модернизация примера CarEvents с использованием лямбда-выражений
Лямбда-выражения и члены, сжатые до выражений (обновление в версии 7.0)
Резюме
Глава 13
Программные конструкции, специфичные для LINQ
Неявная типизация локальных переменных
Синтаксис инициализации объектов и коллекций
Лямбда-выражения
Расширяющие методы
Анонимные типы
Роль LINQ
Выражения LINQ строго типизированы
Основные сборки LINQ
Применение запросов LINQ к элементарным массивам
Решение с использованием расширяющих методов
Решение без использования LINQ
Выполнение рефлексии результирующего набора LINQ
LINQ и неявно типизированные локальные переменные
LINQ и расширяющие методы
Роль отложенного выполнения
Роль немедленного выполнения
Возвращение результатов запроса LINQ
Возвращение результатов LINQ посредством немедленного выполнения
Применение запросов LINQ к объектам коллекций
Доступ к содержащимся в контейнере подобъектам
Применение запросов LINQ к необобщенным коллекциям
Фильтрация данных с использованием метода OfТуре<Т>()
Исследование операций запросов LINQ
Базовый синтаксис выборки
Получение подмножества данных
Проецирование в новые типы данных
Проецирование в другие типы данных
Подсчет количества с использованием класса Enumerable
Изменение порядка следования элементов в результирующих наборах на противоположный
Выражения сортировки
LINQ как лучшее средство построения диаграмм Венна
Устранение дубликатов
Операции агрегирования LINQ
Внутреннее представление операторов запросов LINQ
Построение выражений запросов с применением операций запросов
Построение выражений запросов с использованием типа Enumerable и лямбда-выражений
Построение выражений запросов с использованием типа Enumerable и анонимных методов
Построение выражений запросов с использованием типа Enumerable и низкоуровневых делегатов
Резюме
Глава 14
Роль процесса Windows
Роль потоков
Взаимодействие с процессами используя платформу .NET Core
Перечисление выполняющихся процессов
Исследование конкретного процесса
Исследование набора потоков процесса
Исследование набора модулей процесса
Запуск и останов процессов программным образом
Управление запуском процесса с использованием класса ProcessStartInfo
Использование команд операционной системы с классом ProcessStartInfo
Домены приложений .NET
Класс System.AppDomain
Взаимодействие со стандартным доменом приложения
Перечисление загруженных сборок
Изоляция сборок с помощью контекстов загрузки приложений
Итоговые сведения о процессах, доменах приложений и контекстах загрузки
Резюме
Глава 15
Отношения между процессом, доменом приложения, контекстом и потоком
Сложность, связанная с параллелизмом
Роль синхронизации потоков
Пространство имен System.Threading
Класс System.Threading.Thread
Получение статистических данных о текущем потоке выполнения
Свойство Name
Свойство Priority
Ручное создание вторичных потоков
Работа с делегатом ThreadStart
Работа с делегатом ParametrizedThreadStart
Класс AutoResetEvent
Потоки переднего плана и фоновые потоки
Проблема параллелизма
Синхронизация с использованием ключевого слова lock языка C#
Синхронизация с использованием типа System.Threading.Monitor
Синхронизация с использованием типа System.Threading.Interlocked
Программирование с использованием обратных вызовов Timer
Использование автономного отбрасывания (нововведение в версии 7.0)
Класс ThreadPool
Параллельное программирование с использованием TPL
Пространство имен System.Threading.Tasks
Роль класса Parallel
Обеспечение параллелизма данных с помощью класса Parallel
Доступ к элементам пользовательского интерфейса во вторичных потоках
Класс Task
Обработка запроса на отмену
Обеспечение параллелизма задач с помощью класса Parallel
Запросы Parallel LINQ (PLINQ)
Создание запроса PLINQ
Отмена запроса PLINQ
Асинхронные вызовы с помощью async/await
Знакомство с ключевыми словами async и await языка C# (обновление в версиях 7.1, 9.0)
Класс SynchronizationContext и async/await
Роль метода ConfigureAwait()
Соглашения об именовании асинхронных методов
Асинхронные методы, возвращающие void
Асинхронные методы, возвращающие void и поддерживающие await
Асинхронные методы, возвращающие void и работающие в стиле "запустил и забыл"
Асинхронные методы с множеством контекстов await
Вызов асинхронных методов из неасинхронных методов
Ожидание с помощью await в блоках catch и finally
Обобщенные возвращаемые типы в асинхронных методах (нововведение в версии 7.0)
Локальные функции (нововведение в версии 7.0)
Отмена операций async/await
Асинхронные потоки (нововведение в версии 8.0)
Итоговые сведения о ключевых словах async и await
Резюме
Часть 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