Краткое огла вле н и е
Предисловие . . ... . ........... .................... . . . .. . .. .......... . .. .. ......... . . . ....... .. .. ....... ...... ....... ....... ................................ 1 2
Введение..................................................................................................................................................... 1 4

Часть I. Основы CLR . . . . . . . . . . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . . .. . . . .. . . . . . . . . . . . . . . . . . 1 9
Глава 1 . Модель выполнения кода в среде CLR .. ... . ...... . . .. .... . . . ..... . ............. ..... .. ...................... 2 0
Глава 2 . Компоновка , упаковка, развертывание
и администрирование приложений и типов .............................................................. 34
Глава 3. Совместно используемые сборки и сборки с о строгим именем ........................ 7 1
 
Часть II. Проектирование типов ................................................. 99
Глава 4. Основы типов ...................................................................................................................... 1 00
Глава 5. Примитивные, ссылочные и значимые типы .......................................................... 1 2 1
Глава 6 . Основные сведения о членах и типах .................................. ...................................... 1 65
Глава 7. Константы и поля ... ................. .......... ..... ........ . ....... .. . . ...... . .. ..... ........ ................................. 1 9 1
Глава 8 . Методы ................................................................................................................................... 1 9 6
Глава 9 . Параметры . . . . . . . . . . . . . . . . . . . . . . . . ......... . . . . . . . . . ............ ...................................................................... 2 3 0
Глава 10 . Свойства . . .. ... ................ . . . . . . ......... .... . . .. . .......... ......... .............................................................. 248
Глава 11 . События ................................................................................................................................. 272
Глава 12. Обобщения ................................................. ...................................... .................................... 289
Глава 13. Интерфейсы ............................ ................................................... .......................... ................ 322

Часть III. Основные типы данных ............................................. 343
Глава 14. Символы, строки и обработка текста ......................................................................... 344
Глава 15. Перечислимые типы и битовые флаги ...................................................................... 393
Глава 1 6. Массивы ................................................................................................................................. 406
Глава 1 7. Делегаты ................................................................................................................................ 426
Глава 18. Настраиваемые атрибуты ................................................................................................ 458
Глава 19. Null-совместимые значимые типы ............................................................................... 4 8 1

Часть IV. Ключевые механизмы ............................................... 491
Глава 2 0 . Исключения и управление состоянием ..................................................................... 492
Глава 2 1 . Автоматическое управление памятью
(сборка мусора) ...................................................................... ............................................ 552
Глава 22. Хаетинг CLR и домены приложений ............................. ............................................ 633
Глава 23. Загрузка сборок и отражение ..... : .................................... ......... ..................................... 665
Глава 24. Сериализация ...................................................................................................... ................ 709

Часть V. Многопоточность ...................................................... 743
Глава 25 . Потоки исполнения . . . .. ... ................. . ............... ........ ......... . . . ...... . ....................................... 744
Глава 26. Асинхронные вычислительные операции ................................................................. 771
Глава 27. Асинхронные операции ввода-вывода .. .. .. ......... . ....... ................................................ 8 1 3
Глава 28. Простейшие конструкции синхронизации потоков ............................................. 852
Глава 29. Гибридные конструкции синхронизации потоков ................................................ 889


О Г Л А В Л Е Н И Е 

Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4
Для кого эта книга ........................................................................................................................... 15
Посвящение ........................................................................................................................................ 16
Благодарности ................................................................................................................................... 1 6
Поддержка ........................................................................................................................................... 1 7
М ы хотим вас услышать ................................................................................................................ 1 7

Часть 1. Основы CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 9

Глава 1 . Модель выполнения кода в среде CLR . . . . . .. . . .. . . .............. 20
Компиляция исходного кода в управляемые модули ........................................................ 20
Объединение управляемых моду лей в сборку ................ ...................................................... 24
Загрузка CLR ..................................................................................................................................... 25
Исполнение кода сборки ............................................................................................................... 29

Глава 2. Компоновка, упаковка, развертывание
и администрирование приложений и типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Задачи развертывания в .NET Fгamewoгk .............................................................................. 34
Компоновка типов в моду ль ................................... ..................................................................... 36
Несколько слов о метаданных ..................................................................................................... 40
Объединение модулей для создания сборки ......................................................................... 47
Ресурсы со сведениями о версии сборки ................................................................................ 58
Региональные стандарты ......................................... .... ........... ....................................................... 63
Развертывание простых приложений (закрытое развертывание сборок) ................ . . 65
Простое средство администрирования (конфигурационный файл) ............................ 67

Глава 3. Совместно используемые сборки и сборки
со строгим именем . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .. . . .. . .. .. . .... . .. ... . . 71
Два вида сборок - два вида развертывания .......................................................................... 72
Назначение сборке строгого имени ........................................................................................... 74
Глобальный кэш сборок ................................................................................................................. 79
Компоновка сборки , ссылающейся на сборку со строгим именем ............................... 82
Устойчивость сборок со строгими именами
к несанкционированной модификации ............................................................................. 83
От ложеиное подписание ................................................................................................................ 85
Закрытое развертывание сборок со строгими именами .................................................... 88
Как исполняющая среда разрешает ссылки на типы ......................................................... 89
Дополнительные административные средства ( конфигурационные файлы) .............. 93

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

Глава 4. Основы типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 00
Все типы - производные от System.Object ......................................................................... 100
Приведение типов .................. ........................................................................................................ 102
Оглавление 7
Пространства имен и сборки ..................................................................................................... 106
Как разные компоненты взаимодействуют во время выполнения ............................. 1 1 1

Глава 5 . Примитивные, ссылочные и значимые типы . . . . . . . . . . . . . . . . . 1 21
Примитивные типы в языках программирования ............................................................. 1 2 1
Ссылочные и значимые типы .................................................................................................... 1 2 9
Упаковка и распаковка значимых типов ............................................................................... 136
Хэш-коды объектов ....................................................................................................................... 155
Примитивный тип данных dynaшic ........................................................................................ 158

Глава 6. Основные сведения о членах и типах . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 65
Члены типа ....................................................................................................................................... 1 65
Видимость типа ............................................................................................................................... 1 68
Доступ к членам .............................................................................................................................. 170
Статические классы ....................................................................................................................... 172
Частичные классы, структуры и интерфейсы ..................................................................... 1 7 4
Компоненты , полиморфизм и версии ..................................................................................... 17 5

Глава 7. Константы и поля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 1 91
Константы ......................................................................................................................................... 1 9 1
Поля ..................................................................................................................................................... 193

Глава 8. Методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 96
Конструкторы экземпляров и классы (ссылочные типы) .............................................. 196
Конструкторы экземпляров и структуры (значимые типы) ......................................... 200
Конструкторы типов ..................................................................................................................... 204
Методы перегруженных операторов ....................................................................................... 2 1 1
Методы операторов преобразования ...................................................................................... 2 15
Методы расширения ...................................................................................................................... 2 1 9
Частичные методы ......................................................................................................................... 225

Глава 9. Параметры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Необязательные и именованные параметры ........................................................................ 230
Неявно типизированные локальные переменные .............................................................. 234
Передача параметров в метод по ссылке ............................................................................... 236
Передача в метод перемениого количества аргументов .................................................. 242
Типы параметров и возвращаемых значений ...................................................................... 245
Константность ................... ........ ....................................................................................................... 24 7

Глава 10. Свойства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Свойства без параметров ............................................................................................................. 248
Свойства с параметрами .............................................................................................................. 264
Производительность при вызове методов-аксессоров свойств .................................... 270
Доступность аксессоров свойств .............................................................................................. 270
Обобщенные методы-аксессоры свойств ............................................................................... 271

Глава 11 . События . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Разработка типа, поддерживающего событие ...................................................................... 273
Как реализуются с обытия ........................................................................................................... 279
Создание типа, отслеживающего событие ............................................................................ 282
Явное управление регистрацией событий ............................................................................ 284
8 О главление

Глава 12. Обобщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .. 289
Обобщения в библиотеке FCL .................................................................................................. 294
Б иблиотека Power Collections производства Wintellect .................................................. 295
Инфраструктура обобщений ..................... ................................................................................. 296
Обобщенные интерфейсы ........................................................................................................... 303
Обобщенные делегаты ........................................................................................... ....................... 304
Обобщенные методы ..................................................................................................................... 308
Обобщения и другие члены ....................................... ................................................................ 3 1 1
Верификация и ограничения ..................................................................................................... 3 1 1

Глава 13. Интерфейсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Наследование в классах и интерфейсах ................................................................................ 322
Определение интерфейсов .......................................................................................................... 323
Наследование интерфейсов ........................................................................................................ 324
Подробнее о вызовах интерфейсных методов ..................................................................... 327
Явные и неявные реализации интерфейсных методов
(что происходит за кулисами) ............................................................................................ 329
Обобщенные интерфейсы ........................................................................................................... 33 1
Обобщения и ограничения интерфейса ................................................................................. 333
Реализация нескольких интерфейсов с одинаковыми
сигнатурами и именами методов ....................................................................................... 335
Совершенствование контроля типов за с чет явной реализации
интерфейсных методов .......................................................................................................... 336
Опасности явной реализации интерфейсных методов .................................................... 338
Дилемма разработчика: базовый класс или интерфейс ? ................................................ 34 1
Часть 111. Основные типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Глава 1 4. Символы, строки и обработка текста . . . . . . . . . . . . . . . . . . . . . . . . . 344
Символы ............................................................................................................................................ 344
Тип Systeш. String ........................................................................................................................... 347
Эффективное создание строк .................................................................................................... 364
П олучение строкового представления объекта ................................................................... 368
П олучение объекта посредством разбора строки ............................................................... 378
Кодировки: преобразования между символами и байтами ............................................ 38 1
Защищенные строки ...................................................................................................................... 389
Глава 1 5. Перечислимые типы и битовые флаги . . . . . . . . . . . . . . . . . . . . . . . . 393
Перечислимые типы ...................................................................................................................... 393
Б итовые флаги ................................................................................................................................. 399
Добавление методов к перечислимым типам ................. ..................................................... 404
Глава 1 6. Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 406
Инициализация элементов массива ........................................................................................ 408
Приведение типов в массивах ................................................................................................... 4 1 1
Базовый класс System.Array ....................................................................................................... 4 1 3
Реализация интерфейсов I EnumeraЬ!e, I Collection и I List ............................................ 4 1 4
Передача и возврат массивов ..................................................................................................... 4 1 5
Массивы с иенулевой нижней границей ...................................... ......................................... 4 1 6
Производительность доступа к массиву ................................................................................ 4 1 8
Небезапасный доступ к массивам и массивы фиксированного размера .................. 423
Оглавление 9
Глава 1 7. Делегаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Знакомство с делегатами .... ......... .. .. .. ....... ... . . .. ...... .. . . ....... . . .. . ... ... .... . .. ...... . ..... .. ..... ..... ..... . .... . . . .. .. 426
Обратный вызов статических методов . ........ .. ................ .. ...... .... .. ....... ............................. ...... 429
Обратный вызов экземплярных методов ......... .......................... .... . .. .. ...... .... ... ........ ........ ..... 430
Раскрытие тайны делегатов ........ ...... ......... .... ... .. .. ... ......... .. ... ... .. ..... ............ ... ............ .... ....... ... . . 43 1
Обратный вызов нескольких методов ( цепочки делегатов) ....... ....... .. ... . . ... . . ... . ...... ... .. . 436
Обобщенные делегаты . .................. .......................... .... ........... ........................................... .. .. ....... 443
Упрощенный синтаксис для работы с делегатами ..... ..... ................................................. .. 445
Делегаты и отражение .................................................................................................................. 454
Глава 18. Настраиваемые атрибуты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Сфера применения настраиваемых атрибутов ... .. .............. ....... .......................................... 458
Определение класса атрибутов ...... ..... . ... ..... .. . ... ....... .. . ...... .. .. ..... ..... .. ..... ...... . .. ... ...................... 462
Конструктор атрибута и типы данных полей и свойств .................... .... .......... .... ...... . .... 466
Выявление настраиваемых атрибутов ... . ............................................... ........ ................ ...... ... 467
Сравнение экземпляров атрибута ... .. ............................................... . . . ...... ...... ...... ....... ..... ....... 472
Выявление настраиваемых атрибутов без создания производных
от класса Attribute объектов . ................. ....... ........................... .............. ....... ......... . . . ... ....... 475
Условные атрибуты ............. ......... ...... . . ........... . .. . ...... ............ ..... ................ ..... .. .. ..... ..... ..... .. ..... ... .. 479
Глава 1 9. Null-совместимые значимые типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Поддержка в С# null-совместимых значимых типов ....................................................... 483
Оператор объединения null-совместимых значений .. ....................................... .... .......... 486
Поддержка в CLR null-совместимых значимых типов ....................................... .... . ...... .. 488
Часть IV. Ключевые механизмы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Глава 20. Исключения и управпение состоянием . . . . . . . . . . . . . . . . . . . . . . . 492
Определение 4ИСключения• ................................ ........... .......... .................................................. 492
Механика обработки исключений ......... ...... ...... ......... . . ......... ................ ............ ............. ......... 494
Класс System. Exception ........ . .. .... ........... ... . . . . .. ......... .. ........ . . .. ... ....... .... ... .. .. ..... . ... . ....... . . ... . . ..... .... 501
Классы исключений, определенные в FCL .......................................................................... 505
Вбрасывание исключений ........................................................................................................... 508
Создание классов исключений ................................................................................ .................. 509
Продуктивность вместо надежности ....................................................................................... 5 1 2
Приемы работы с исключениями ............................................................................................. 52 1
Необработанные исключения .................................................................................................... 529
Отладка исключений ..................................................................................................................... 534
Скорость обработки исключений ............................................................................................. 536
Области ограниченного выполнения ...................................................................................... 539
Контракты кода ............................................................................................................................... 543
Глава 21 . Автоматическое управпение памятью
(сборка мусора) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Работа на платформе, поддерживающей сборку мусора ................................................. 552
Алгоритм сборки мусора ............................................................................................................. 556
Сборка мусора и отладка ............................................. ................................................................ 560
Освобождение ресурсов при помощи механизма финализации .................................. 564
Финализация управляемых ресурсов ..................................................................................... 571
Мотивы вызова методов финализации .................................................................................. 574
1 0 Оглавление
Детали механизма финализации .............................................................................................. 576
Эталон освобождения ресурсов: принудительная очистка объекта ........................... 579
Типы, реализующие эталон освобождения ресурсов ........................................................ 584
Инструкция using языка С# ....................................................................................................... 588
И нтересные аспекты зависимостей ......................................................................................... 590
Мониторинг и контроль времени жизни объектов ........................................................... 592
Воскрешение ..................................................................................................................................... 605
Поколения ......................................................................................................................................... 607
Другие возможности сборщика мусора для работы
с машинными ресурсами ...................................................................................................... 6 1 4
Прогнозирование успеха операции, требующей много памяти .................................... 6 1 9
Программное управление сборщиком мусора ..................................................................... 62 1
Захват потока ................................................................................................................................... 625
Режимы сборки мусора ................................................................................................................ 626
Большие объекты ........................................................................................................................... 630
Мониторинг сборки мусора ........................................................................................................ 630
Глава 22. Хаетинг CLR и домены приложений . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Хаетинг CLR .................................................................................................................................... 633
Домены приложений ..................................................................................................................... 636
Выгрузка доменов .......................................................................................................................... 652
Мониторинг доменов .................................................................................................................... 653
Уведомление о первом управляемом исключении домена ............................................. 655
Использование хостами доменов приложений .................................................................. 656
Нетривиальное управление хостингом .................................................................................. 659
Глава 23. Загрузка сборок и отражение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Загрузка сборок ............................................................................................................................... 665
Использование отражения для создания динамически
расширяемых приложений .................................................................................................. 67 1
Производительность отражения ............................................................................................... 672
Создание приложений с поддержкой подключаемых компонентов ........................... 68 1
Нахождение членов типа путем отражения ......................................................................... 684
Глава 24. Сериализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Краткое руководство по сериализацииjдесериализации ................................................ 7 1 0
Сериализуемые типы .................................................................................................................... 7 1 5
Управление сериализацией и десериализацией .................................................................. 7 1 7
Сериализация экземпляров типа ............................................................................................. 72 1
Управление сериализованными и десериализованными данными ............................. 723
Контексты потока ввода-вывода ............................................................................................... 730
Сериализация в другой тип и десериализация в другой объект ................................. 732
Суррогаты сериализации ............................................................................................................. 736
Переопределение сборки иjили типа при десериализации объекта .......................... 740
Часть V. Многопоточность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 43
Глава 25. Потоки исполнения . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . ........ 744
Зачем потоки в Windows? ........................................................................................................... 744
Ресурсоемкость потоков .............................................................................................................. 7 45
Так дальше не пойдет! .................................................................................................................. 750
Оглавление 1 1
Тенденции развития процессаров ............................................................................................ 7 52
Неравномерный доступ к памяти ............................................................................................ 7 54
CLR- и Windows-пoтoки .............................................................................................................. 756
Потоки для асинхронных вычислительных операций ..................................................... 757
Мотивы использования потоков .............................................................................................. 7 59
Порядок исполнения и приоритеты потоков ...................................................................... 762
Фоновые и активные потоки ..................................................................................................... 768
Что дальше? ...................................................................................................................................... 769
Глава 26. Асинхронные вычислительные операции . . . . . . . . . . . . . . . . . . . . 771
Пул потоков в CLR ....................................................................................................................... 77 1
Простые вычислительные операции ....................................................................................... 773
Контексты исполнения ........................................................................... . . . ................................... 77 4
Скоординированная отмена ....................................................................................................... 776
Задания ............................................................................................................................................... 78 1
Методы For, ForEach и Invoke класса Parallel .................................................................... 796
Встроенный язык параллельных запросов ........................................................................... 800
Периодические вычислительные операции ......................................................................... 804
Как пул управляет потоками ..................................................................................................... 807
Строки кэша и ложное разделение .......................................................................................... 81 О
Глава 27. Асинхронные операции ввода-вывода . . . . . . . . . . . . . . . . . . . . . . . . 813
Операции ввода-вывода в Windows ........................................................................................ 8 1 3
Модель асинхронного программирования в CLR ............................................................. 8 1 8
Класс AsyncEnumerator ................................................................................................................ 823
Модель асинхронного программирования и исключения .............................................. 827
Потоковые модели приложений ............................................................................................... 828
Асинхронная реализация сервера ............................................................................................ 832
Модель асинхронного программирования и вычислительные операции ................. 833
Анализ модели асинхронного программирования ............................................................. 835
Приоритеты запросов ввода-вывода ....................................................................................... 840
Преобразование объекта IAsyncResult в объект Task ....................................................... 843
Эталон асинхронного программирования на базе событий ........................................... 844
Сводная информация по моделям программирования ................................................... 850
Глава 28. Простейшие конструкции синхронизации потоков . . . . . . . 852
Библиотеки классов и безопасность потоков ...................................................................... 854
Простейшие конструкции пользовательского режима и режима ядра ..................... 856
Конструкции пользовательского режима .............................................................................. 857
Конструкции режима ядра .......................................................................................................... 876
Глава 29. Гибридные конструкции синхронизации потоков . . . . . . . . . 889
Простое гибридное запирание ................................................................................................... 889
Зацикливание, владение потоком и рекурсия ..................................................................... 89 1
Различные гибридные конструкции ....................................................................................... 894
Запирание с двойной проверкой .............................................................................................. 91 О
Эталон условной переменной .................................................................................................... 9 15
Сокращение времени запирания при помощи коллекций ............................................. 918
Классы коллекций для параллельной обработки потоков ............................................. 923


Предислов ие
Поначалу, когда Джефф попросил меня написать предисловие для своей книги,
я была очень польщена. Я подумала, что он по-настоящему меня уважает.
Дорогие мои, поверьте, это общее заблуждение наивных