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