Author(s): ДЖозеф Албахари и Бен Албахари
Edition: 7
Publisher: Альфа-книга
Year: 2018
Language: Russian
Pages: 1023 с.
City: Санкт-Петербург
Оглавление
Об авторах
Благодарности
Предисловие
Предполагаемая читательская аудитория
Как организована эта книга
Что требуется для работы с этой книгой
Соглашения, используемые в этой книге
Использование примеров кода
Ждем ваших отзывов!
Глава 1. Введение в C# и .NET Framework
Объектная ориентация
Безопасность в отношении типов
Управление памятью
Поддержка платформ
C# и CLR
CLR и .NET Framework
Другие инфраструктуры
Унаследованные и нишевые инфраструктуры
Windows Runtime
Краткая история языка C#
Нововведения версии C# 7.0
Нововведения версии C# 6.0
Нововведения версии C# 5.0
Нововведения версии C# 4.0
Нововведения версии C# 3.0
Нововведения версии C# 2.0
Глава 2. Основы языка C#
Первая программа на C#
Компиляция
Синтаксис
Идентификаторы и ключевые слова
Литералы, знаки пунктуации и операции
Комментарии
Основы типов
Примеры предопределенных типов
Примеры специальных типов
Преобразования
Типы значений и ссылочные типы
Классификация предопределенных типов
Числовые типы
Числовые литералы
Числовые преобразования
Арифметические операции
Операции инкремента и декремента
Специальные операции с целочисленными типами
8- и 16-битные целочисленные типы
Специальные значения float и double
Выбор между double и decimal
Ошибки округления вещественных чисел
Булевские типы и операции
Булевские преобразования
Операции сравнения и проверки равенства
Условные операции
Строки и символы
Символьные преобразования
Строковый тип
Массивы
Стандартная инициализация элементов
Многомерные массивы
Упрощенные выражения инициализации массивов
Проверка границ
Переменные и параметры
Стек и куча
Определенное присваивание
Стандартные значения
Параметры
Ссылочные локальные переменные (C# 7)
Возвращаемые ссылочные значения (C# 7)
Объявление неявно типизированных локальных переменных с помощью var
Выражения и операции
Первичные выражения
Пустые выражения
Выражения присваивания
Приоритеты и ассоциативность операций
Таблица операций
Операции для работы со значениями null
Операция объединения с null
null-условная операция (C# 6)
Операторы
Операторы объявления
Операторы выражений
Операторы выбора
Операторы итераций
Операторы перехода
Смешанные операторы
Пространства имен
Директива using
Директива using static (С#6)
Правила внутри пространства имен
Назначение псевдонимов типам и пространствам имен
Дополнительные возможности пространств имен
Глава 3. Создание типов в C#
Классы
Поля
Методы
Конструкторы экземпляров
Деконструкторы (C# 7)
Инициализаторы объектов
Ссылка this
Свойства
Индексаторы
Константы
Статические конструкторы
Статические классы
Финализаторы
Частичные типы и методы
Операция nameof (C# 6)
Наследование
Полиморфизм
Приведение и ссылочные преобразования
Виртуальные функции-члены
Абстрактные классы и абстрактные члены
Сокрытие унаследованных членов
Запечатывание функций и классов
Ключевое слово base
Конструкторы и наследование
Перегрузка и распознавание
Тип object
Упаковка и распаковка
Статическая проверка типов и проверка типов во время выполнения
Метод Get Туре и операция type of
МетодToString
Список членов object
Структуры
Семантика конструирования структуры
Модификаторы доступа
Примеры
Дружественные сборки
Установление верхнего предела доступности
Ограничения, накладываемые на модификаторы доступа
Интерфейсы
Расширение интерфейса
Явная реализация членов интерфейса
Реализация виртуальных членов интерфейса
Повторная реализация члена интерфейса в подклассе
Интерфейсы и упаковка
Перечисления
Преобразования перечислений
Перечисления флагов
Операции над перечислениями
Проблемы безопасности типов
Вложенные типы
Обобщения
Обобщенные типы
Для чего предназначены обобщения
Обобщенные методы
Объявление параметров типа
Операция typeof и несвязанные обобщенные типы
Стандартное значение обобщенного параметра типа
Ограничения обобщений
Создание подклассов для обобщенных типов
Самоссылающиеся объявления обобщений
Статические данные
Параметры типа и преобразования
Ковариантность
Контравариантность
Сравнение обобщений C# и шаблонов C++
Глава 4. Дополнительные средства C#
Делегаты
Написание подключаемых методов с помощью делегатов
Групповые делегаты
Целевые методы экземпляра и целевые статические методы
Обобщенные типы делегатов
Делегаты Func и Action
Сравнение делегатов и интерфейсов
Совместимость делегатов
События
Стандартный шаблон событий
Средства доступа к событию
Модификаторы событий
Лямбда-выражения
Явное указание типов лямбда-параметров
Захватывание внешних переменных
Сравнение лямбда-выражений и локальных методов
Анонимные методы
Операторы try и исключения
Конструкция catch
Блок finally
Генерация исключений
Основные свойства класса System. Exception
Общие типы исключений
Шаблон методов ТгуХХХ
Альтернативы исключениям
Перечисление и итераторы
Перечисление
Инициализаторы коллекций
Итераторы
Семантика итератора
Компоновка последовательностей
Типы, допускающие значение null
Структура Null able <Т>
Подъем операций
Тип bool? и операции & и |
Типы, допускающие null, и операции для работы со значениями null
Сценарии использования типов, допускающих null
Альтернативы типам, допускающим значение null
Расширяющие методы
Цепочки расширяющих методов
Неоднозначность и разрешение
Анонимные типы
Кортежи (C# 7)
Именование элементов кортежа
Метод ValueTuple. Create
Деконструирование кортежей
Сравнение эквивалентности
Классы System. Tuple
Атрибуты
Классы атрибутов
Именованные и позиционные параметры атрибутов
Цели атрибутов
Указание нескольких атрибутов
Атрибуты информации о вызывающем компоненте
Динамическое связывание
Сравнение статического и динамического связывания
Специальное связывание
Языковое связывание
Исключение RuntimeBinderException
Представление типа dynamic во время выполнения
Динамические преобразования
Сравнение var и dynamic
Динамические выражения
Динамические вызовы без динамических получателей
Статические типы в динамических выражениях
Невызываемые функции
Перегрузка операций
Функции операций
Перегрузка операций эквивалентности и сравнения
Специальные неявные и явные преобразования
Перегрузка операций true и false
Небезопасный код и указатели
Основы указателей
Небезопасный код
Оператор fixed
Операция указателя на член
Массивы
void*
Указатели на неуправляемый код
Директивы препроцессора
Условные атрибуты
Директива ftpragma warning
XML-документация
Стандартные XML-дескрипторы документации
Дескрипторы, определяемые пользователем
Перекрестные ссылки на типы или члены
Глава 5. Обзор .NET Framework
.NET Standard 2.0
Старые стандарты .NET Standard
Ссылочные сборки
Среда CLR и ядро платформы
Системные типы
Обработка текста
Коллекции
Запросы
XML
Диагностика
Параллелизм и асинхронность
Потоки данных и ввод-вывод
Работа с сетями
Сериализация
Сборки, рефлексия и атрибуты
Динамическое программирование
Безопасность
Расширенная многопоточность
Параллельное программирование
Домены приложений
Собственная возможность взаимодействия и возможность взаимодействия с СОМ
Прикладные технологии
Технологии пользовательских интерфейсов
Технологии серверной части
Технологии распределенных систем
Глава 6. Основы .NET Framework
Обработка строк и текста
Тип char
Тип string
Сравнение строк
Класс StringBuilder
Кодировка текста и Unicode
Дата и время
Структура Time Span
Структуры DateTime и DateTimeOf f set
Даты и часовые пояса
DateTime и часовые пояса
DateTimeOf f set и часовые пояса
TimeZoneиTimeZonelnfo
Летнее время и DateTime
Форматирование и разбор
ToString и Parse
Поставщики форматов
Стандартные форматные строки и флаги разбора
Форматные строки для чисел
Перечисление NumberStyles
Форматные строки для даты/времени
Перечисление DateTimeStyles
Форматные строки для перечислений
Другие механизмы преобразования
Класс Convert
Класс XmlConvert
Преобразователи типов
Класс BitConverter
Глобализация
Контрольный перечень глобализации
Тестирование
Работа с числами
Преобразования
KziaccMath
Структура Biglnteger
Структура Complex
Класс Random
Перечисления
Преобразования для перечислений
Перечисление значений enum
Как работают перечисления
Структура Guid
Сравнение эквивалентности
Эквивалентность значений и ссылочная эквивалентность
Стандартные протоколы эквивалентности
Эквивалентность и специальные типы
Сравнение порядка
Интерфейсы I Comparable
Операции < и >
Реализация интерфейсов IComparable
Служебные классы
Класс Console
Класс Environment
Класс Process
Класс AppContext
Глава 7. Коллекции
Перечисление
IEnumerable иIEnumerator
IEnumerable иIEnumerator
Реализация интерфейсов перечисления
Интерфейсы ICollection и IList
ICollectionиICollection
IList иIList
IReadOnlyList
Класс Array
Конструирование и индексация
Перечисление
Длина и ранг
Поиск
Сортировка
Обращение порядка следования элементов
Копирование
Преобразование и изменение размера
Списки, очереди, стеки и наборы
List и ArrayList
LinkedList
Queue и Queue
Stack и Stack
BitArray
HashSet и SortedSet
Словари
IDictionarycTKey,TValue>
IDictionary
Dictionary и Hashtable
OrderedDictionary
ListDictionary и HybridDictionary
Отсортированные словари
Настраиваемые коллекции и прокси
Collection и CollectionBase
KeyedCollectioncTKey,TItem> и DictionaryBase
ReadOnlyCollectioncT>
Подключение протоколов эквивалентности и порядка
IEqualityComparer и EqualityComparer
IComparer и Comparer
StringComparer
IStructuralEquatableиIStructuralComparable
Глава 8. Запросы LINQ
Начало работы
Текучий синтаксис
Выстраивание в цепочки операций запросов
Составление лямбда-выражений
Естественный порядок
Другие операции
Выражения запросов
Переменные диапазона
Сравнение синтаксиса запросов и синтаксиса SQL
Сравнение синтаксиса запросов и текучего синтаксиса
Запросы со смешанным синтаксисом
Отложенное выполнение
Повторная оценка
Захваченные переменные
Как работает отложенное выполнение
Построение цепочки декораторов
Каким образам выполняются запросы
Подзапросы
Подзапросы и отложенное выполнение
Стратегии композиции
Постепенное построение запросов
Ключевое слово into
Упаковка запросов
Стратегии проекции
Инициализаторы объектов
Анонимные типы
Ключевое слово let
Интерпретируемые запросы
Каким образом работают интерпретируемые запросы
Комбинирование интерпретируемых и локальных запросов
AsEnumerable
LINQ to SQL и Entity Framework
Сущностные классы LINQ to SQL
Сущностные классы Entity Framework
DataContext и ObjectContext
Ассоциации
Отложенное выполнение в L2S и EF
DataLoadOptions
Энергичная загрузка в Entity Framework
Обновления
Отличия между API-интерфейсами L2S и EF
Построение выражений запросов
Сравнение делегатов и деревьев выражений
Деревья выражений
Глава 9. Операции LINQ
Обзор
Последовательность → последовательность
Последовательность → элемент или значение
Ничего → последовательность
Выполнение фильтрации
Where
Таке и Skip
TakeWhileиSkipWhile
Distinct
Выполнение проекции
Select
SelectMany
Выполнение соединения
Join иGroupJoin
Операция Zip
Упорядочение
OrderBy, OrderByDescending, ThenBy и ThenByDescending
Группирование
GroupBy
Операции над множествами
Concat и Union
Intersect и Except
Методы преобразования
OfTypenCast
ToArray, ToList, ToDictionary и ToLookup
AsEnumerableи AsQueryable
Операции над элементами
First,Last и Single
ElementAt
DefaultlfEmpty
Методы агрегирования
Count и LongCount
Min и Max
Sum и Average
Aggregate
Квантификаторы
Contains и Any
All и SequenceEqual
Методы генерации
Empty
Range и Repeat
Глава 10. LINQ to XML
Обзор архитектуры
Что собой представляет DOM-модель?
DOM-модель LINQ to XML
Обзор модели X-DOM
Загрузка и разбор
Сохранение и сериализация
Создание экземпляра X-DOM
Функциональное построение
Указание содержимого
Автоматическое глубокое копирование
Навигация и запросы
Навигация по дочерним узлам
Навигация по родительским узлам
Навигация по равноправным узлам
Навигация по атрибутам
Обновление модели X-DOM
Обновление простых значений
Обновление дочерних узлов и атрибутов
Обновление через родительский элемент
Работа со значениями
Установка значений
Получение значений
Значения и узлы со смешанным содержимым
Автоматическая конкатенация XText
Документы и объявления
XDocument
Объявления XML
Имена и пространства имен
Пространства имен в XML
Указание пространств имен в X-DOM
Модель Х-DOM и стандартные пространства имен
Префиксы
Аннотации
Проецирование в модель X-DOM
Устранение пустых элементов
Потоковая передача проекции
Трансформирование X-DOM
Глава 11. Другие технологии XML
XmlReader
Чтение узлов
Чтение элементов
Чтение атрибутов
Пространства имен и префиксы
XmlWriter
Запись атрибутов
Запись других типов узлов
Пространства имен и префиксы
Шаблоны для использования XmlReader/XmlWriter
Работа с иерархическими данными
Смешивание XmlReader/XmlWr iter с моделью X-DOM
XSD и проверка достоверности с помощью схемы
Выполнение проверки достоверности с помощью схемы
XSLT
Глава 12. Освобождение и сборка мусора
IDisposable, Dispose и Close
Стандартная семантика освобождения
Когда выполнять освобождение
Подключаемое освобождение
Очистка полей при освобождении
Автоматическая сборка мусора
Корневые объекты
Сборка мусора и WinRT
Финализаторы
Вызов метода Dispose из финализатора
Восстановление
Как работает сборщик мусора?
Приемы оптимизации
Принудительный запуск сборки мусора
Настройка сборки мусора
Нагрузка на память
Утечки управляемой памяти
Таймеры
Диагностика утечек памяти
Слабые ссылки
Слабые ссылки и кеширование
Слабые ссылки и события
Глава 13. Диагностика
Условная компиляция
Сравнение условной компиляции и статических переменных-флагов
Атрибут Conditional
Классы Debug и Trace
Fail и Assert
TraceListener
Сброс и закрытие прослушивателей
Интеграция с отладчиком
Присоединение и останов
Атрибуты отладчика
Процессы и потоки процессов
Исследование выполняющихся процессов
Исследование потоков в процессе
StackTrace и StackFrame
Журналы событий Windows
Запись в журнал событий
Чтение журнала событий
Мониторинг журнала событий
Счетчики производительности
Перечисление доступных счетчиков производительности
Чтение данных счетчика производительности
Создание счетчиков и запись данных о производительности
Класс Stopwatch
Глава 14. Параллелизм и асинхронность
Введение
Многопоточная обработка
Создание потока
Join и Sleep
Блокировка
Локальное или разделяемое состояние
Блокировка и безопасность потоков
Передача данных потоку
Обработка исключений
Потоки переднего плана или фоновые потоки
Приоритет потока
Передача сигналов
Многопоточность в обогащенных клиентских приложениях
Контексты синхронизации
Пул потоков
Задачи
Запуск задачи
Возвращение значений
Исключения
Продолжение
TaskCompletionSource
Task.Delay
Принципы асинхронности
Сравнение синхронных и асинхронных операций
Что собой представляет асинхронное программирование?
Асинхронное программирование и продолжение
Важность языковой поддержки
Асинхронные функции в C#
Ожидание
Написание асинхронных функций
Асинхронные лямбда-выражения
Асинхронные методы в WinRT
Асинхронность и контексты синхронизации
Оптимизация
Асинхронные шаблоны
Отмена
Сообщение о ходе работ
Асинхронный шаблон, основанный на задачах
Комбинаторы задач
Устаревшие шаблоны
Модель асинхронного программирования
Асинхронный шаблон на основе событий
BackgroundWorker
Глава 15. Потоки данных и ввод-вывод
Потоковая архитектура
Использование потоков
Чтение и запись
Поиск
Закрытие и сбрасывание
Тайм-ауты
Безопасность в отношении потоков управления
Потоки с опорными хранилищами
FileStream
MemoryStream
PipeStream
BufferedStream
Адаптеры потоков
Текстовые адаптеры
Двоичные адаптеры
Закрытие и освобождение адаптеров потоков
Потоки со сжатием
Сжатие в памяти
Работа с ZIP-файлами
Операции с файлами и каталогами
Класс File
Класс Directory
FilelnfoиDirectorylnfo
Path
Специальные папки
Запрашивание информации о томе
Перехват событий файловой системы
Файловый ввод-вывод в UWP
Работа с каталогами
Работа с файлами
Изолированное хранилище в приложениях UWP
Размещенные в памяти файлы
Размещенные в памяти файлы и произвольный файловый ввод-вывод
Размещенные в памяти файлы и разделяемая память
Работа с аксессорами представлений
Изолированное хранилище
Глава 16. Взаимодействие с сетью
Сетевая архитектура
Адреса и порты
Идентификаторы URI
Классы клиентской стороны
WebClient
WebRequest и WebResponse
HttpClient
Прокси-серверы
Аутентификация
Обработка исключений
Работа с протоколом HTTP
Заголовки
Строки запросов
Выгрузка данных формы
Cookie-наборы
Аутентификация на основе форм
SSL
Реализация НТТР-сервера
Использование FTP
Использование DNS
Отправка сообщений электронной почты с помощью SmtpClient
Использование TCP
Параллелизм и TCP
Получение почты POP3 с помощью TCP
TCP в Windows Runtime
Глава 17. Сериализация
Концепции сериализации
Механизмы сериализации
Форматеры
Сравнение явной и неявной сериализации
Сериализатор на основе контрактов данных
Сравнение DataContractSerializer и NetDataContractSerializer
Использование сериализаторов
Сериализация подклассов
Объектные ссылки
Переносимость версий
Упорядочение членов
Пустые значения и null
Контракты данных и коллекции
Элементы коллекции, являющиеся подклассами
Настройка имен коллекции и элементов
Расширение контрактов данных
Ловушки сериализации и десериализации
Возможность взаимодействия с помощью [Serializable]
Возможность взаимодействия с помощью IXmlSerializable
Двоичный сериализатор
Начало работы
Атрибуты двоичной сериализации
[NonSerialized]
[OnDeserializing] и [OnDeserialized]
[OnSerializing] и [OnSerialized]
[OptionalField] и поддержка версий
Двоичная сериализация с помощью ISerializable
Создание подклассов из сериализируемых классов
Сериализация XML
Начало работы с сериализацией на основе атрибутов
Подклассы и дочерние объекты
Сериализация коллекций
IXmlSerializable
Глава 18. Сборки
Содержимое сборки
Манифест сборки
Манифест приложения
Модули
Класс Assemblу
Строгие имена и подписание сборок
Назначение сборке строгого имени
Отложенное подписание
Имена сборок
Полностью заданные имена
Класс Ass emb lyName
Информационная и файловая версии сборки
Подпись Authenticode
Подписание с помощью системы Authenticode
Проверка достоверности подписей Authenticode
Глобальный кеш сборок
Установка сборок в GAC
GAC и поддержка версий
Ресурсы и подчиненные сборки
Встраивание ресурсов напрямую
Файлы .resources
Файлы.resx
Подчиненные сборки
Культуры и подкультуры
Распознавание и загрузка сборок
Правила распознавания сборок и типов
Событие AssemblyResolve
Загрузка сборок
Развертывание сборок за пределами базовой папки
Упаковка однофайловой исполняемой сборки
Работа со сборками, не имеющими ссылок на этапе компиляции
Глава 19. Рефлексия и метаданные
Рефлексия и активизация типов
Получение экземпляра Туре
Имена типов
Базовые типы и интерфейсы
Создание экземпляров типов
Обобщенные типы
Рефлексия и вызов членов
Типы членов
Сравнение членов C# и членов CLR
Члены обобщенных типов
Динамический вызов члена
Параметры методов
Использование делегатов для повышения производительности
Доступ к неоткрытым членам
Обобщенные методы
Анонимный вызов членов обобщенного интерфейса
Рефлексия сборок
Загрузка сборки в контекст, предназначенный только для рефлексии
Модули
Работа с атрибутами
Основы атрибутов
Атрибут AttributeUsage
Определение собственного атрибута
Извлечение атрибутов во время выполнения
Извлечение атрибутов в контексте, предназначенном только для рефлексии
Динамическая генерация кода
Генерация кода IL с помощью класса DynamicMethod
Стек оценки
Передача аргументов динамическому методу
Генерация локальных переменных
Ветвление
Создание объектов и вызов методов экземпляра
Обработка исключений
Выпуск сборок и типов
Сохранение сгенерированных сборок
Объектная модель Reflection. Emit
Выпуск членов типа
Выпуск методов
Выпуск полей и свойств
Выпуск конструкторов
Присоединение атрибутов
Выпуск обобщенных методов и типов
Определение обобщенных методов
Определение обобщенных типов
Сложности, связанные с генерацией
Несозданные закрытые обобщения
Циклические зависимости
Синтаксический разбор IL
Написание дизассемблера
Глава 20. Динамическое программирование
Исполняющая среда динамического языка
Унификация числовых типов
Динамическое распознавание перегруженных членов
Упрощение паттерна “Посетитель”
Анонимный вызов членов обобщенного типа
Реализация динамических объектов
DvnamicOb j ect
ExpandoObject
Взаимодействие с динамическими языками
Передача состояния между C# и сценарием
Глава 21. Безопасность
Безопасность доступа кода
Безопасность на основе удостоверений и ролей
Разрешения
Сравнение декларативной и императивной безопасности
Реализация безопасности на основе удостоверений и ролей
Назначение пользователей и ролей
Подсистема безопасности операционной системы
Выполнение от имени учетной записи стандартного пользователя
Повышение полномочий до административных и виртуализация
Обзор криптографии
Защита данных Windows
Хеширование
Симметричное шифрование
Шифрование в памяти
Соединение в цепочку потоков шифрования
Освобождение объектов шифрования
Управление ключами
Шифрование с открытым ключом и подписание
Класс RSA
Цифровые подписи
Глава 22. Расширенная многопоточность
Обзор синхронизации
Монопольное блокирование
Оператор lock
Monitor.Enter и Monitor.Exit
Выбор объекта синхронизации
Когда нужна блокировка
Блокирование и атомарность
Вложенное блокирование
Взаимоблокировки
Производительность
Mutex
Блокирование и безопасность к потокам
Безопасность к потокам и типы .NET Framework
Безопасность к потокам в серверах приложений
Неизменяемые объекты
Немонопольное блокирование
Семафор
Блокировки объектов чтения/записи
Сигнализирование с помощью дескрипторов ожидания событий
AutoResetEvent
ManualResetEvent
CountdownEvent
Создание межпроцессного объекта EventWaitHandle
Дескрипторы ожидания и продолжение
Преобразование дескрипторов ожидания в задачи
WaitAny, WaitAllи SignalAndWait
Класс Barrier
Ленивая инициализация
Lazy
Lazylnitializer
Локальное хранилище потока
[ThreadStatic]
ThreadLocal
GetData и SetData
Interrupt и Abort
Suspend и Resume
Таймеры
Многопоточные таймеры
Однопоточные таймеры
Глава 23. Параллельное программирование
Для чего нужна инфраструктура PFX?
Концепции PFX
Компоненты PFX
Когда необходимо использовать инфраструктуру PFX?
PLINQ
Продвижение параллельного выполнения
PLINQ и упорядочивание
Ограничения PLINQ
Пример: параллельная программа проверки орфографии
Функциональная чистота
Установка степени параллелизма
Отмена
Оптимизация PLINQ
Класс Parallel
Parallel.Invoke
Parallel.For и Parallel.ForEach
Параллелизм задач
Создание и запуск задач
Ожидание на множестве задач
Отмена задач
Продолжение
Планировщики задач
TaskFactory
Работа с AggregateException
Flatten и Handle
Параллельные коллекции
IProducerConsumerCollection
ConcurrentBag
BlockingCollection
Реализация очереди производителей/потребителей
Глава 24. Домены приложений
Архитектура доменов приложений
Создание и уничтожение доменов приложений
Использование нескольких доменов приложений
Использование DoCallBack
Мониторинг доменов приложений
Домены и потоки
Разделение данных между доменами
Разделение данных через ячейки
Использование Remoting внутри процесса
Изолирование типов и сборок
Глава 25. Способность к взаимодействию
Обращение к низкоуровневым DLL-библиотекам
Маршализация типов
Маршализация общих типов
Маршализация классов и структур
Маршализация параметров in и out
Обратные вызовы из неуправляемого кода
Эмуляция объединения С
Разделяемая память
Отображение структуры на неуправляемую память
fixed и fixed { . . . }
Взаимодействие с СОМ
Назначение СОМ
Основы системы типов СОМ
Обращение к компоненту СОМ из C#
Необязательные параметры и именованные аргументы
Неявные параметры ref
Индексаторы
Динамическое связывание
Внедрение типов взаимодействия
Эквивалентность типов
Основные сборки взаимодействия
Открытие объектов C# для СОМ
Глава 26. Регулярные выражения
Основы регулярных выражений
Скомпилированные регулярные выражения
RegexOptions
Отмена символов
Наборы символов
Квантификаторы
Жадные и ленивые квантификаторы
Утверждения нулевой ширины
Просмотр вперед и просмотр назад
Привязки
Границы слов
Группы
Именованные группы
Замена и разделение текста
Делегат MatchEvaluator
Разделение текста
Рецептурный справочник по регулярным выражениям
Рецепты
Справочник по языку регулярных выражений
Глава 27. Компилятор Roslyn
Архитектура Roslyn
Рабочие области
Синтаксические деревья
Структура SyntaxTree
Получение синтаксического дерева
Обход и поиск в дереве
Трансформация синтаксического дерева
Объекты компиляции и семантические модели
Создание объекта компиляции
Выпуск сборки
Выдача запросов к семантической модели
Пример: переименование символа
Предметный указатель