·
Часть 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
·
Выводы по гибридным конструкциям
§ Блокировка
с двойной проверкой
§ Паттерн
условной переменной
§ Асинхронная
синхронизация
§ Классы
коллекций для параллельного доступа