CLR via C# | Джеффри Рихтер

Версия 3.1 от Alexandr Fokin на 2020/08/09 22:10

·       Часть I. Основы CLR

o   Глава 1. Модель выполнения кода в среде CLR

§  Компиляция исходного кода в управляемые модули

§  Объединение управляемых модулей в сборку

§  Загрузка CLR

§  Исполнение кода сборки

·         IL-код и верификация

·         Небезопасный код

·         IL и защита интеллектуальной собственности

§  NGen.exe

§  Библиотека FCL

§  CTS

§  CLS

§  Взаимодействие с неуправляемым кодом

o   Глава 2. Компоновка, упаковка, развертывание и администрирование приложений и типов

§  Задачи развертывания в .NET Framework

§  Компоновка типов в модуль

·         Файл параметров

§  Несколько слов о метаданных

§  Объединение модулей для создания сборки

·         Добавление сборок в проект в среде Visual Studio

·         Использование утилиты Assembly Linker

·         Включение в сборку файлов ресурсов

§  Ресурсы со сведениями о версии сборки

·         Номера версии

§  Региональные стандарты

§  Развертывание простых приложений (закрытое развертывание сборок)

§  Простое средство администрирования (конфигурационный файл)

·         Алгоритм поиска файлов сборки

o   Глава 3. Совместно используемые сборки и сборки со строгим именем

§  Два вида сборок — два вида развертывания

§  Назначение сборке строгого имени

§  Глобальный кэш сборок

§  Построение сборки, ссылающейся на сборку со строгим именем

§  Устойчивость сборок со строгими именами к несанкционированной модификации

§  Отложенное подписание

§  Закрытое развертывание сборок со строгими именами

§  Как исполняющая среда разрешает ссылки на типы

§  Дополнительные административные средства (конфигурационные файлы)

·         Управление версиями при помощи политики издателя

·       Часть II. Проектирование типов

o   Глава 4. Основы типов

§  Все типы — производные от System.Object

§  Приведение типов

·         Приведение типов в C# с помощью операторов is и as

§  Пространства имен и сборки

·         Связь между сборками и пространством имен

§  Как разные компоненты взаимодействуют во время выполнения

o   Глава 5. Примитивные, ссылочные и значимые типы

§  Примитивные типы в языках программирования

·         Проверяемые и непроверяемые операции для примитивных типов

§  Ссылочные и значимые типы

·         Как CLR управляет размещением полей для типа

§  Упаковка и распаковка значимых типов

·         Изменение полей в упакованных значимых типах посредством интерфейсов (и почему этого лучше не делать)

·         Равенство и тождество объектов

§  Хеш-коды объектов

§  Примитивный тип данных dynamic

o   Глава 6. Основные сведения о членах и типах

§  Члены типа

§  Видимость типа

·         Дружественные сборки

§  Доступ к членам типов

§  Статические классы

§  Частичные классы, структуры и интерфейсы

§  Компоненты, полиморфизм и версии

·         Вызов виртуальных методов, свойств и событий в CLR

·         Разумное использование видимости типов и модификаторов доступа к членам

·         Работа с виртуальными методами при управлении версиями типов

o   Глава 7. Константы и поля

§  Константы

§  Поля

o   Глава 8. Методы

§  Конструкторы экземпляров и классы (ссылочные типы)

§  Конструкторы экземпляров и структуры (значимые типы)

§  Конструкторы типов

§  Методы перегруженных операторов

·         Операторы и взаимодействие языков программирования

·         Особое мнение автора о правилах Microsoft, связанных с именами методов операторов

§  Методы операторов преобразования

§  Методы расширения

·         Правила и рекомендации

·         Расширение разных типов методами расширения

·         Атрибут расширения

§  Частичные методы

·         Правила и рекомендации

o   Глава 9. Параметры

§  Необязательные и именованные параметры

·         Правила использования параметров.

·         Атрибут DefaultParameterValue и необязательные атрибуты

§  Неявно типизированные локальные переменные

§  Передача параметров в метод по ссылке

§  Передача переменного количества аргументов

§  Типы параметров и возвращаемых значений

§  Константность

o   Глава 10. Свойства

§  Свойства без параметров

·         Автоматически реализуемые свойства

·         Осторожный подход к определению свойств

·         Свойства и отладчик Visual Studio

·         Инициализаторы объектов и коллекций

·         Анонимные типы

·         Тип System.Tuple

§  Свойства с параметрами

·         Выбор главного свойства с параметрами

§  Производительность при вызове методов доступа

§  Доступность методов доступа свойств

§  Обобщенные методы доступа свойств

o   Глава 11. События

§  Разработка типа, поддерживающего событие

§  Этап 1. Определение типа для хранения всей дополнительной информации, передаваемой получателям уведомления о событии

§  Этап 2. Определение члена-события

§  Этап 3. Определение метода, ответственного за уведомление зарегистрированных объектов о событии

§  Этап 4. Определение метода, преобразующего входную информацию в желаемое событие

§  Реализация событий компилятором

§  Создание типа, отслеживающего событие

§  Явное управление регистрацией событий

o   Глава 12. Обобщения

§  Обобщения в библиотеке FCL

§  Инфраструктура обобщений

·         Открытые и закрытые типы

·         Обобщенные типы и наследование

·         Идентификация обобщенных типов

·         Разрастание кода

§  Обобщенные интерфейсы

§  Обобщенные делегаты

·         Контравариантные и ковариантные аргументы-типы в делегатах и интерфейсах

§  Обобщенные методы

·         Обобщенные методы и выведение типов

§  Обобщения и другие члены

§  Верификация и ограничения

·         Основные ограничения

·         Дополнительные ограничения

·         Ограничения конструктора

·         Другие проблемы верификации

o   Глава 13. Интерфейсы

§  Наследование в классах и интерфейсах

§  Определение интерфейсов

§  Наследование интерфейсов

§  Подробнее о вызовах интерфейсных методов

§  Явные и неявные реализации интерфейсных методов (что происходит за кулисами)

§  Обобщенные интерфейсы

§  Обобщения и ограничения интерфейса

§  Реализация нескольких интерфейсов с одинаковыми сигнатурами и именами методов

§  Совершенствование безопасности типов за счет явной реализации интерфейсных методов

§  Опасности явной реализации интерфейсных методов

§  Дилемма разработчика: базовый класс или интерфейс?

·       Часть III. Основные типы данных

o   Глава 14. Символы, строки и обработка текста

§  Символы

§  Тип System.String

·         Создание строк

·         Неизменяемые строки

·         Сравнение строк

·         Интернирование строк

·         Создание пулов строк

·         Работа с символами и текстовыми элементами в строке

·         Прочие операции со строками

§  Эффективное создание строк

·         Создание объекта StringBuilder

·         Члены типа StringBuilder

§  Получение строкового представления объекта

·         Форматы и региональные стандарты

·         Форматирование нескольких объектов в одну строку

·         Создание собственного средства форматирования

§  Получение объекта посредством разбора строки

§  Кодировки: преобразования между символами и байтами

·         Кодирование и декодирование потоков символов и байтов

·         Кодирование и декодирование строк в кодировке Base-64

§  Защищенные строки

o   Глава 15. Перечислимые типы и битовые флаги

§  Перечислимые типы

§  Битовые флаги

§  Добавление методов к перечислимым типам

o   Глава 16. Массивы

§  Инициализация элементов массива

§  Приведение типов в массивах

§  Базовый класс System Array

§  Реализация интерфейсов IEnumerable, ICollection и IList

§  Передача и возврат массивов

§  Массивы с ненулевой нижней границей

§  Внутренняя реализация массивов

§  Небезопасный доступ к массивам и массивы фиксированного размера

o   Глава 17. Делегаты

§  Знакомство с делегатами

§  Обратный вызов статических методов

§  Обратный вызов экземплярных методов

§  Тонкости использования делегатов

§  Обратный вызов нескольких методов (цепочки делегатов)

·         Поддержка цепочек делегатов в C#

·         Дополнительные средства управления цепочками делегатов

§  Обобщенные делегаты

§  Упрощенный синтаксис работы с делегатами

·         Упрощение 1: не создаем объект делегата

·         Упрощение 2: не определяем метод обратного вызова

·         Упрощение 3: не создаем обертку для локальных переменных для передачи их методу обратного вызова

§  Делегаты и отражение

o   Глава 18. Настраиваемые атрибуты

§  Сфера применения настраиваемых атрибутов

§  Определение класса атрибутов

§  Конструктор атрибута и типы данных полей и свойств

§  Выявление настраиваемых атрибутов

§  Сравнение экземпляров атрибута

§  Выявление настраиваемых атрибутов без создания объектов, производных от Attribute

§  Условные атрибуты

o   Глава 19. Null-совместимые значимые типы

§  Поддержка в C# null-совместимых значимых типов

§  Оператор объединения null-совместимых значений

§  Поддержка в CLR null-совместимых значимых типов

·         Упаковка null-совместимых значимых типов

·         Распаковка null-совместимых значимых типов

·         Вызов метода GetType через null-совместимый значимый тип

·         Вызов интерфейсных методов через null-совместимый  значимый тип

·       Часть IV. Ключевые механизмы

o   Глава 20. Исключения и управление состоянием 496

§  Определение «исключения»

§  Механика обработки исключений

·         Блок try

·         Блок catch

·         Блок finally

·         CLS-совместимые и CLS-несовместимые исключения

§  Класс System.Exception

§  Классы исключений, определенные в FCL

§  Генерирование исключений

§  Создание классов исключений

§  Продуктивность вместо надежности

§  Приемы работы с исключениями

·         Активно используйте блоки finally

·         Не надо перехватывать все исключения

·         Корректное восстановление после исключения

§  Отмена незавершенных операций при невосстановимых исключениях

§  Сокрытие деталей реализации для сохранения контракта

§  Необработанные исключения

§  Отладка исключений

§  Скорость обработки исключений

§  Области ограниченного выполнения

§  Контракты кода

o   Глава 21. Автоматическое управление памятью (уборка мусора)

§  Управляемая куча

·         Выделение ресурсов из управляемой кучи

·         Алгоритм уборки мусора

·         Уборка мусора и отладка

§  Поколения

·         Запуск уборки мусора

·         Большие объекты

·         Режимы уборки мусора

·         Программное управление уборщиком мусора

·         Мониторинг использования памяти приложением

§  Освобождение ресурсов при помощи механизма финализации

·         Типы, использующие системные ресурсы

·         Интересные аспекты зависимостей

·         Другие возможности уборщика мусора для работы с системными ресурсами

·         Внутренняя реализация финализации

§  Мониторинг и контроль времени жизни объектов

o   Глава 22. Хостинг CLR и домены приложений

§  Хостинг CLR

§  Домены приложений

·         Доступ к объектам из других доменов

§  Выгрузка доменов

§  Мониторинг доменов

§  Уведомление о первом управляемом исключении домена

§  Использование хостами доменов приложений

·         Исполняемые приложения

·         Полнофункциональные интернет-приложения Silverlight

·         Microsoft ASPNET и веб-службы XML

·         Microsoft SQL Server

·         Будущее и мечты

§  Нетривиальное управление хостингом

·         Применение управляемого кода

·         Разработка надежных хост-приложений

·         Возвращение потока в хост

o   Глава 23. Загрузка сборок и отражение

§  Загрузка сборок

§  Использование отражения для создания динамически расширяемых приложений

§  Производительность отражения

·         Нахождение типов, определенных в сборке

·         Объект Type

·         Создание иерархии типов, производных от Exception

·         Создание экземпляра типа

§  Создание приложений с поддержкой подключаемых компонентов

·         Нахождение членов типа путем отражения

·         Нахождение членов типа

·         Обращение к членам типов

·         Использование дескрипторов привязки для снижения потребления памяти процессом

o   Глава 24. Сериализация

§  Практический пример сериализации/десериализации

§  Сериализуемые типы

§  Управление сериализацией и десериализацией

§  Сериализация экземпляров типа

§  Управление сериализованными и десериализованными данными

·         Определение типа, реализующего интерфейс ISerializable, не реализуемый базовым классом

§  Контексты потока ввода-вывода

§  Сериализация в другой тип и десериализация в другой объект

§  Суррогаты сериализации

·         Цепочка селекторов суррогатов

§  Переопределение сборки и/или типа при десериализации объекта

o   Глава 25. Взаимодействие с компонентами WinRT

§  Проекции уровня CLR и правила системы типов компонентов WinRT

·         Основные концепции системы типов WinRT

§  Проекции уровня .NET Framework

·         Асинхронные вызовы WinRT API из кода  NET

·         Взаимодействия между потоками WinRT и потоками  NET

·         Передача блоков данных между CLR и WinRT

§  Определение компонентов WinRT в коде C#

·       Часть V. Многопоточность

o   Глава 26. Потоки исполнения

§  Для чего Windows поддерживает потоки?

§  Ресурсоемкость потоков

§  Так дальше не пойдет!

§  Тенденции развития процессоров

§  CLR- и Windows-потоки

§  Потоки для асинхронных вычислительных операций

§  Причины использования потоков

§  Планирование и приоритеты потоков

§  Фоновые и активные потоки

§  Что дальше?

o   Глава 27. Асинхронные вычислительные операции

§  Пул потоков в CLR

§  Простые вычислительные операции

§  Контексты исполнения

§  Скоординированная отмена

§  Задания

·         Завершение задания и получение результата

·         Отмена задания

·         Автоматический запуск задания по завершении предыдущего

·         Дочерние задания

·         Структура задания

·         Фабрики заданий

·         Планировщики заданий

§  Методы For, ForEach и Invoke класса Parallel

§  Встроенный язык параллельных запросов

§  Периодические вычислительные операции

·         Разновидности таймеров

§  Как пул управляет потоками

·         Ограничение количества потоков в пуле

·         Управление рабочими потоками

o   Глава 28. Асинхронные операции ввода-вывода

§  Операции ввода-вывода в Windows

§  Асинхронные функции C#

§  Преобразование асинхронной функции в конечный автомат

§  Расширяемость асинхронных функций

§  Асинхронные функции и обработчики событий

§  Асинхронные функции в FCL

§  Асинхронные функции и исключения

§  Другие возможности асинхронных функций

§  Потоковые модели приложений

§  Асинхронная реализация сервера

§  Отмена операций ввода-вывода

·         Некоторые операции ввода-вывода должны выполняться синхронно

·         Проблемы FileStream

§  Приоритеты запросов ввода-вывода

o   Глава 29. Примитивные конструкции синхронизации потоков

§  Библиотеки классов и безопасность потоков

§  Примитивные конструкции пользовательского режима

§  и режима ядра

§  Конструкции пользовательского режима

·         Volatile-конструкции

·         Interlocked-конструкции

·         Реализация простой циклической блокировки

·         Универсальный Interlocked-паттерн

§  Конструкции режима ядра

·         События

·         Семафоры

·         Мьютексы

o   Глава 30. Гибридные конструкции синхронизации потоков

§  Простая гибридная блокировка

§  Зацикливание, владение потоком и рекурсия

§  Гибридные конструкции в FCL

·         Классы ManualResetEventSlim и SemaphoreSlim

·         Класс Monitor и блоки синхронизации

·         Класс ReaderWriterLockSlim

·         Класс OneManyLock

·         Класс CountdownEvent

·         Класс Barrier

·         Выводы по гибридным конструкциям

§  Блокировка с двойной проверкой

§  Паттерн условной переменной

§  Асинхронная синхронизация

§  Классы коллекций для параллельного доступа

Теги: Book Книга
Создал(а) Alexandr Fokin 2020/01/05 21:44