Эндрю Троелсен
Язык программирования С# 2008 и платформа .NET 3.5
Скриншот из книги:

СОДЕРЖАНИЕ
Об авторе
О техническом редакторе
Благодарности
Введение
Автор и читатель — одна команда ..32
Краткий обзор содержания ..33
Часть I. Общие сведения о языке С# и платформе .NET ..33Исходный код примеров ..42
Часть II. Главные конструкции программирования на С# ..34
Часть III. Дополнительные конструкции программирования на С# ..35
Часть IV. Программирование с использованием сборок .NET ..36
Часть V. Введение в библиотеки базовых классов .NET ..38
Часть VI. Настольные пользовательские интерфейсы ..39
Часть VII. Построение веб-приложений с использованием ASP.NET ..40
Часть VIII. Приложения ..41
От издательства ..42
ЧАСТЬ I. Общие сведения о языке С# и платформе .NET
Глава 1. Философия .NET
Предыдущее состояние дел ..44Глава 2. Создание приложений на языке С#
Подход С/Win32 API ..45
Подход C++/MFC ..45
Подход Visual Basic 6.0 ..45
Подход Java/J2EE ..46
Подход СОМ ..46
Подход Windows DNA ..47
Решение .NET ..48
Знакомство с главными компонентами платформы .NET (CLR, CTS и CLS) ..48
Роль библиотек базовых классов ..49
Что привносит язык С# ..49
Другие языки программирования с поддержкой .NET ..51
Жизнь в многоязычном окружении ..53
Что собой представляют сборки в .NET ..53
Однофайловые и многофайловые сборки ..55
Роль CIL ..55
Преимущества CIL ..57
Компиляция CIL-кода в инструкции, ориентированные на конкретную платформу ..58
Роль метаданных типов .NET ..58
Роль манифеста сборки ..59
Что собой представляет общая система типов (CTS) ..60
Типы классов ..60
Типы интерфейсов ..61
Типы структур ..61
Типы перечислений ..62
Типы делегатов ..62
Члены типов ..62
Встроенные типы данных CTS ..63
Что собой представляет общеязыковая спецификация (CLS) ..64
Обеспечение гарантии соответствия CLS ..65
Что собой представляет общеязыковая исполняющая среда (CLR) ..66
Различия между сборками, пространствами имен и типами ..67
Роль, которую исполняют пространства имен Microsoft ..70
Получение доступа к пространствам имен программным образом ..71
Добавление ссылок на внешние сборки ..72
Изучение сборки с помощью утилиты ildasm.exe ..73
Просмотр CIL-кода ..74
Просмотр метаданных типов ..74
Просмотр метаданных сборки (т.е. манифеста) ..74
Изучение сборки с помощью утилиты Reflector ..75
Развертывание исполняющей среды .NET ..76
Не зависимая от платформы природа .NET ..76
Резюме ..78
Роль, которую исполняет .NET Framework 3.5 SDK ..79ЧАСТЬ II. Главные конструкции программирования на С#
Окно командной строки Visual Studio ..80
Построение приложений на С# с использованием csc.exe ..81
Указание целевых входных и выходных параметров ..82
Добавление ссылок на внешние сборки ..83
Добавление ссылок на несколько внешних сборок ..84
Компиляция нескольких файлов исходного кода ..84
Работа с ответными файлами в С# ..85
Создание .NET-приложений с использованием TfextPad ..87
Активизация функции выделения ключевых слов С# цветом ..87
Настройка фильтра файлов *.сs ..87
Подключение к csc.exe ..89
Ассоциирование команд выполнения с пунктами меню ..90
Создание приложений .NET с использованием Notepad++ ..91
Настройка списка вариантов для автоматического завершения кода ..92
Создание .NET-приложений с использованием SharpDevelop ..92
Построение простого тестового проекта ..93
Создание .NET-приложений с использованием Visual С# 2008 Express ..95
Некоторые уникальные функциональные возможности Visual С# Express ..95
Создание .NET-приложений с использованием Visual Studio 2008 ..96
Некоторые уникальные функциональные возможности Visual Studio 2008 ..97
Ориентирование на .NET Framework с использованием диалогового окна New Project ..97
Использование утилиты Solution Explorer ..98
Утилита Class View ..100
Утилита Object Browser ..100
Встроенная поддержка для рефакторинга программного кода ..101
Возможности для расширения и завертывания кода в определенный контекст ..103
Утилита Class Designer ..104
Инструмент Object Ttest Bench ..107
Интегрированная система документации .NET Framework 3.5 ..108
Дополнительные средства разработки .NET-приложений ..109
Резюме ..109
Глава 3. Главные конструкции программирования на С#: часть I
Разбор простой программы на С# ..112Глава 4. Главные конструкции программирования на С#: часть II
Варианты метода Мain() ..114
Спецификация кода ошибки в приложении ..114
Обработка аргументов командной строки ..116
Указание аргументов командной строки в Visual Studio 2008 ..118
Интересное отклонение от темы: некоторые дополнительные члены класса System.Environment ..118
Класс System.Console ..119
Базовый ввод и вывод с помощью Console ..120
Форматирование консольного вывода ..121
Форматирование числовых данных ..122
Форматирование числовых данных за пределами консольных приложений ..123
Системные типы данных и их сокращенное обозначение в С# ..124
Объявление и инициализация переменных ..125
Применение ключевого слова new для внутренних типов данных ..127
Иерархия классов типов данных ..127
Члены числовых типов данных ..129
Члены System.Boolean ..130
Члены System.Char ..130
Выполнение синтаксического анализа значений из строковых данных ..131
Тип System.String ..131
Базовые операции манипулирования строками ..132
Конкатенация строк ..133
Управляющие последовательности символов ..134
Определение дословных строк ..135
Строки и равенство ..135
Неизменная природа строк ..136
Тип System.Text.StringBuilder ..138
Типы System.DateTime и System.TimeSpan ..139
Сужающие и расширяющие преобразования типов данных ..140
Перехват сужающих преобразований данных ..142
Настройка проверки переполнения в масштабах всего проекта ..144
Ключевое слово unchecked ..145
Роль System.Convert ..145
Итерационные конструкции в С# ..145
Цикл for ..146
Цикл foreach ..146
Конструкции while и do/while ..147
Конструкции принятия решений и операции отношения и равенства ..147
Оператор if/else ..148
Оператор switch ..149
Резюме ..150
Методы и модификаторы параметров ..151Глава 5. Определение инкапсулированных типов классов
Используемое по умолчанию поведение для передачи параметров ..152
Модификатор out ..153
Модификатор ref ..154
Модификатор params ..155
Перегрузка методов ..157
Манипулирование массивами в С# ..159
Синтаксис инициализации массивов в С# ..160
Определение массива объектов ..161
Работа с многомерными массивами ..162
Использование массивов в качестве параметров (и возвращаемых значений) ..163
Базовый класс System.Аrray ..164
Тип enum ..165
Управление базовым типом, используемым для хранения значений перечислений ..166
Объявление и использование перечислений ..167
Тип System.Enum ..168
Динамическое обнаружение пар имя/значение перечисления ..168
Типы структур ..171
Создание переменных структур ..172
Типы-значения и ссылочные типы ..173
Типы-значения, ссылочные типы и операция присваивания ..174
Типы-значения, содержащие ссылочные типы ..176
Передача ссылочных типов по значению ..178
Передача ссылочных типов по ссылке ..179
Типы-значения и ссылочные типы: заключительные детали ..180
Нулевые типы в С# ..181
Работа с нулевыми типами ..183
Операция ?? ..183
Резюме ..184
Знакомство с типом класса С# ..185Глава 6. Понятия наследования и полиморфизма
Размещение объектов с помощью ключевого слова new ..187
Понятие конструктора класса ..188
Роль конструктора по умолчанию ..189
Определение специальных конструкторов ..189
Еще раз о конструкторе по умолчанию ..190
Роль ключевого слова this ..191
Построение цепочки вызовов конструкторов с использованием this ..193
Обзор потока конструктора ..195
Понятие ключевого слова static ..196
Определение статических методов (и полей) ..197
Определение статических данных ..197
Определение статических конструкторов ..200
Определение статических классов ..201
Основы объектно-ориентированного программирования ..203
Роль инкапсуляции ..203
Роль наследования ..204
Роль полиморфизма ..205
Модификаторы доступа С# ..206
Модификаторы доступа по умолчанию ..207
Модификаторы доступа и вложенные типы ..208
Первый принцип: службы инкапсуляции С# ..208
Инкапсуляция с использованием традиционных методов доступа и изменения ..209
Инкапсуляция с использованием свойств типа ..210
Внутреннее представление свойств ..212
Управление уровнями видимости операторов get/set свойств ..214
Свойства, доступные только для чтения и только для записи ..214
Статические свойства ..215
Понятие константных данных ..216
Понятие полей только для чтения ..217
Статические поля только для чтения ..218
Понятие частичных типов ..218
Документирование исходного кода С# посредством XML ..219
Генерация файла XML ..221
Трансформация XML-комментариев кода посредством NDoc ..223
Визуализация плодов нашего труда ..224
Резюме ..225
Базовый механизм наследования ..226Глава 7. Структурированная обработка исключений
Спецификация родительского класса ..227
О множественном наследовании ..228
Ключевое слово sealed ..229
Изменение диаграмм классов Visual Studio ..230
Второй принцип: подробности о наследовании ..231
Управление созданием базового класса с помощью ключевого слова base ..233
Хранение фамильных тайн: ключевое слово protected ..235
Добавление герметизированного класса ..235
Реализация модели включения/делегации ..236
Понятие определения вложенных типов ..238
Третий принцип: поддержка полиморфизма в С# ..239
Ключевые слова virtual и override ..240
Переопределение виртуальных членов в Visual Studio 2008 ..242
Герметизированные виртуальные члены ..243
Понятие абстрактных классов ..243
Построение полиморфного интерфейса ..245
Понятие сокрытия членов ..248
Понятие правил приведения к базовому и производному классу ..250
Ключевое слово as ..251
Ключевое слово is ..252
Родительский главный класс System.Object ..252
Переопределение System.Object.ToString() ..255
Переопределение System.Object.Equals() ..256
Переопределение System.Object.GetHashCode() ..257
Тестирование модифицированного класса Person ..257
Статические члены System.Object ..258
Резюме ..258
Ода ошибкам и исключениям ..259Глава 8. Время жизни объектов
Роль обработки исключений в .NET ..260
Элементы обработки исключений в .NET ..261
Базовый класс System.Exception ..262
Простейший пример ..263
Выдача обобщенного исключения ..265
Перехват исключений ..266
Конфигурирование состояния исключения ..267
Свойство ТаrgetSite ..267
Свойство StackTrace ..268
Свойство HelpLink ..269
Свойство Data ..270
Исключения системного уровня (System.SystemException) ..271
Исключения уровня приложения (System.ApplicationException) ..272
Создание специальных исключений, способ первый ..273
Создание специальных исключений, способ второй ..275
Создание специальных исключений, способ третий ..276
Обработка множества исключений ..277
Обобщенные операторы catch ..279
Передача исключений ..279
Внутренние исключения ..280
Блок finally ..281
Какие исключения могут выдавать методы ..282
К чему приводят необработанные исключения ..283
Отладка необработанных исключений в Visual Studio ..283
Резюме ..284
Классы, объекты и ссылки ..285ЧАСТЬ III. Дополнительные конструкции программирования на С#
Базовые сведения о времени жизни объектов ..286
CIL-код для new ..287
Установка для объектных ссылок значения null ..288
Роль, которую исполняют корневые элементы приложения ..289
Поколения объектов ..291
Тип System.GC ..292
Принудительная активизация процесса сборки мусора ..293
Создание финализируемых объектов ..296
Переопределение System.Object.Finalize() ..297
Детали процесса финализации ..299
Создание самоочищаемых объектов ..299
Повторное использование ключевого слова using в С# ..302
Создание финализируемых и самоочищаемых типов ..303
Формализованный шаблон очистки ..304
Резюме ..306
Глава 9. Работа с интерфейсами
Что собой представляют типы интерфейсов ..308Глава 10. Коллекции и обобщения
Сравнение типов интерфейсов с абстрактными базовыми классами ..310
Определение специальных интерфейсов ..312
Реализация интерфейса ..314
Вызов членов интерфейса на уровне объектов ..316
Получение ссылок на интерфейсы с помощью ключевого слова as ..317
Получение ссылок на интерфейсы с помощью ключевого слова is ..317
Использование интерфейсов в качестве параметров ..318
Использование интерфейсов в качестве возвращаемых значений ..319
Массивы типов интерфейсов ..320
Реализация интерфейсов в Visual Studio 2008 ..321
Устранение конфликтов на уровне имен за счет явной реализации интерфейсов ..322
Проектирование иерархий интерфейсов ..325
Множественное наследование в случае типов интерфейсов ..326
Создание перечислимых типов (IEnumerable и IEnumerator) ..328
Создание методов итераторов с использованием ключевого слова yield ..331
Создание именованного итератора ..332
Внутреннее представление метода итератора ..333
Создание клонируемых объектов (ICloneable) ..334
Более сложный пример клонирования ..336
Создание сравнимых объектов (IComparable) ..339
Указание нескольких критериев для сортировки (IComparеr) ..341
Использование специальных свойств и специальных типов для сортировки ..343
Интерфейсы обратного вызова ..343
Резюме ..347
Интерфейсы пространства имен System.Collections ..348Глава 11. Делегаты, события и лямбда-выражения
Роль ICollection ..349
Роль IDictionary ..350
Роль IDictionaryEnumerator ..350
Роль IList ..351
Типы классов System.Collections ..351
Работа с типом ArrayList ..352
Работа с типом Queue ..353
Работа с типом Stack ..354
Пространство имен System.Collections.Specialized ..355
Связь между упаковкой, распаковкой и System.Object ..356
Проблема с операциями упаковки/распаковки ..358
Проблема безопасности типов и строго типизированные коллекции ..359
Построение специальной коллекции ..359
Проблемы упаковки и строго типизированные коллекции ..361
Пространство имен System.Collections.Generic ..363
Исследование типа List..364
Создание специальных обобщенных методов ..366
Выведение параметра-типа ..367
Создание обобщенных структур и классов ..369
Ключевое слово default в обобщенном коде ..369
Создание специальной обобщенной коллекции ..371
Ограничения специальных обобщенных коллекций ..372
Ограничение параметров-типов с помощью ключевого слова where ..373
Недостаток ограничений операций ..375
Создание обобщенных базовых классов ..375
Создание обобщенных интерфейсов ..376
Резюме ..378
Понятие типа делегата .NET ..379Глава 12. Индексаторы, операции и указатели
Определение делегата на С# ..380
Базовые классы System.MulticastDelegate и System.Delegate ..382
Простейший из возможных пример делегата ..384
Исследование объекта делегата ..385
Усовершенствование типа Car с помощью делегатов ..386
Включение группового вызова ..389
Удаление цели из списка вызовов делегата ..390
Более сложный пример делегата ..391
Делегаты как параметры ..392
Анализ кода делегата ..394
Понятие ковариантности делегатов ..395
Создание обобщенных делегатов ..397
Эмуляция обобщенных делегатов без обобщений ..398
Понятие событий С# ..399
Ключевое слово event ..400
"За кулисами" событий ..401
Прослушивание входящих событий ..402
Упрощенная регистрация событий с использованием Visual Studio 2008 ..403
Аккуратное и правильное событие ..404
Обобщенный делегат EventHandler..406
Понятие анонимных методов С# ..406
Доступ к "внешним" переменным ..408
Понятие групповых преобразований методов ..408
Лямбда-операция С# 2008 ..410
Анализ лямбда-выражения ..412
Обработка аргументов внутри множественных операторов ..413
Усовершенствование примера CarDelegate с использованием лямбда-выражений ..414
Лямбда-выражения с несколькими (или нулем) параметров ..415
Резюме ..417
Понятие методов-индексаторов ..418Глава 13. Средства языка С# 2008
Индексация объектов с использованием строковых значений ..420
Перегруженные методы-индексаторы ..421
Внутреннее представление методов-индексаторов ..422
Многомерные индексаторы ..422
Определения индексаторов в интерфейсных типах ..423
Понятие перегрузки операций ..423
Перегрузка бинарных операций ..424
А как насчет операций += и -=? ..426
Перегрузка унарных операций ..427
Перегрузка операций эквивалентности ..428
Перегрузка операций сравнения ..428
Внутреннее представление перегруженных операций ..429
Финальные соображения относительно перегрузки операций ..431
Понятие преобразований пользовательских типов ..432
Числовые преобразования ..432
Преобразования между связанными типами классов ..432
Создание специальных процедур преобразования ..433
Дополнительные явные преобразования типа Square ..435
Определение процедур неявного преобразования ..436
Внутреннее представление процедур пользовательских преобразований ..437
Работа с типами указателей ..438
Ключевое слово unsafe ..440
Работа с операциями * и & ..441
Небезопасная и безопасная функции Swap ..441
Доступ к полям через указатели (операция ->) ..442
Ключевое слово stackalloc ..443
Закрепление типа ключевым словом fixed ..443
Ключевое слово sizeof ..444
Директивы препроцессора С# ..445
Указание областей кода ..445
Условная компиляция кода ..446
Резюме ..448
Понятие неявно типизированных локальных переменных ..449Глава 14. Введение в LINQ
Использование var внутри конструкций for each ..450
Ограничения неявно типизированных переменных ..451
Неявно типизированные локальные массивы ..452
Неявно типизированные данные — это строго типизированные данные ..453
Удобство неявно типизированных локальных переменных ..453
Понятие автоматических свойств ..454
Взаимодействие с автоматическими свойствами ..455
Ограничение доступа к автоматическим свойствам ..456
Автоматические свойства и значения по умолчанию ..456
Понятие расширяющих методов ..457
Определение расширяющих методов ..458
Вызов расширяющих методов на уровне экземпляра ..459
Статический вызов расширяющих методов ..460
Область действия расширяющего метода ..460
Импорт типов, определяющих расширяющие методы ..461
Расширяющие методы в IntelliSense ..462
Построение и использование расширяющих библиотек ..463
Расширение интерфейсных типов посредством расширяющих методов ..464
Понятие частичных методов ..466
Первый взгляд на частичные методы ..466
Применение частичных методов ..468
Синтаксис инициализаторов объектов ..468
Вызов специальных конструкторов с синтаксисом инициализации ..470
Инициализация вложенных типов ..471
Понятие инициализации коллекций ..472
Понятие анонимных типов ..472
Внутреннее представление анонимных типов ..473
Реализация ToString() и GetHashCode() ..475
Семантика эквивалентности анонимных типов ..475
Анонимные типы, содержащие в себе анонимные типы ..477
Резюме ..477
Роль LINQ ..478ЧАСТЬ IV. Программирование с использованием сборок .NET
Выражения LINQ — строго типизированы и расширяемы ..479
Основные сборки LINQ ..480
Первый взгляд на выражения запросов LINQ ..481
LINQ и неявно типизированные локальные переменные ..483
LINQ и расширяющие методы ..484
Роль отложенного выполнения ..485
Роль немедленного выполнения ..486
LINQ и обобщенные коллекции ..487
Применение выражения LINQ ..487
LINQ и необобщенные коллекции ..488
Фильтрация данных с использованием OfТуlе<Т>() ..489
Внутреннее представление операций запросов LINQ ..489
Построение выражений запросов из операций запросов ..490
Построение выражений запросов с использованием типа Enumerable и лямбда-выражений ..491
Построение выражений запросов с использованием перечислимого типа и анонимных методов ..492
Построение выражений запросов с использованием перечислимого типа и "сырых" делегатов ..492
Исследование операций запросов С# LINQ ..493
Получение счетчиков с использованием Enumerable ..494
Построение нового тестового проекта ..495
Запросы LINQ: вещь в себе? ..500
Трансформация результатов запроса в типы массивов ..501
Резюме ..502
Глава 15. Сборки .NET
Определение специальных пространств имен ..504Глава 16. Рефлексия типов, позднее связывание и программирование с использованием атрибутов
Полностью квалифицированное имя типа ..506
Определение псевдонимов с помощью ключевого слова using ..507
Создание вложенных пространств имен ..508
Пространство имен, используемое в Visual Studio 2008 по умолчанию ..509
Роль сборок .NET ..510
Сборки повышают возможность повторного использования кода ..510
Сборки определяют границы типов ..511
Сборки являются единицами, поддерживающими версии ..511
Сборки являются самоописываемыми ..511
Сборки поддаются конфигурированию ..511
Формат сборки .NET ..512
Заголовок файла Win32 ..512
Заголовок файла CLR ..513
CIL-код, метаданные типов и манифест сборки ..513
Необязательные ресурсы сборки ..514
Однофайловые и многофайловые сборки ..514
Создание и использование однофайловой сборки ..515
Изучение манифеста ..519
Исследование CIL-кода ..520
Исследование метаданных типов ..521
Создание клиентского приложения на С# ..521
Создание клиентского приложения на Visual Basic ..523
Межъязыковое наследование в действии ..524
Создание и использование многофайловой сборки ..524
Исследование файла ufо.netmodule ..526
Исследование файла airvehicles.dll ..526
Использование многофайловой сборки ..526
Приватные сборки ..527
Идентичность приватной сборки ..528
Процесс зондирования ..528
Конфигурирование приватных сборок ..529
Конфигурационные файлы и Visual Studio 2008 ..531
Утилита .NET Framework Configuration ..531
Разделяемые сборки ..533
Строгие имена ..534
Назначение строгого имени сборке CarLibrary.dll ..535
Назначение строгих имен в Visual Studio 2008 ..537
Установка и удаление разделяемых сборок из GAC ..537
Использование разделяемой сборки ..538
Изучение манифеста SharedCarLibClient ..539
Конфигурирование разделяемых сборок ..540
Фиксация текущей версии разделяемой сборки ..541
Создание разделяемой сборки версии 2.0.0.0 ..541
Динамическое перенаправление к конкретным версиям разделяемой сборки ..543
Использование утилиты .NET Framework Configuration ..544
Изучение внутреннего устройства GAC ..545
Сборки политик издателя ..546
Отключение политик издателя ..547
Элемент..548
Пространство имен System.Configuration ..549
Конфигурационный файл машины ..550
Резюме ..551
Необходимость в метаданных типов ..552Глава 17. Процессы, домены приложений и контексты объектов
Просмотр части метаданных перечисления EngineState ..553
Просмотр части метаданных типа Car ..554
Изучение блока TypeRef ..555
Просмотр метаданных самой сборки ..555
Просмотр метаданных внешних сборок, на которые ссылается текущая сборка ..556
Просмотр метаданных строковых литералов ..556
Рефлексия ..557
Класс System.Туpe ..557
Получение информации о типе с помощью System.Object.GetType() ..558
Получение информации о типе с помощью System.Type.GetType() ..559
Получение информации о типе с помощью typeof() ..559
Создание специальной программы для просмотра метаданных ..560
Рефлексия методов ..560
Рефлексия полей и свойств ..560
Рефлексия реализуемых интерфейсов ..561
Отображение различных дополнительных деталей ..561
Реализация Main() ..562
Рефлексия обобщенных типов ..563
Рефлексия параметров и возвращаемых значений методов ..563
Динамически загружаемые сборки ..565
Рефлексия разделяемых сборок ..567
Позднее связывание ..568
Класс System.Activator ..569
Вызов методов без параметров ..570
Вызов методов с параметрами ..570
Программирование с использованием атрибутов ..571
Потребители атрибутов ..572
Применение предопределенных атрибутов в С# ..572
Указание параметров конструктора для атрибутов ..574
Атрибут [Obsolete] в действии ..575
Сокращенное обозначение атрибутов в С# ..575
Создание специальных атрибутов ..576
Применение специальных атрибутов ..576
Синтаксис именованных свойств ..577
Ограничение использования атрибутов ..577
Атрибуты уровня сборки (и уровня модуля) ..578
Файл AssemblyInfo.cs в Visual Studio 2008 ..579
Рефлексия атрибутов с использованием раннего связывания ..580
Рефлексия атрибутов с использование позднего связывания ..581
Возможное применение рефлексии, позднего связывания и специальных атрибутов на практике ..582
Создание расширяемого приложения ..583
Создание CommonSnappableTypes.dll ..583
Создание оснастки на С# ..584
Создание подключаемого компонента в Visual Basic .NET ..585
Создание расширяемого приложения Windows Forms ..585
Резюме ..588
Повторный обзор традиционных процессов Win32 ..589Глава 18. Создание многопоточных приложений
Общая информация о потоках ..590
Взаимодействие с процессами в рамках платформы .NET ..592
Перечисление выполняющихся процессов ..594
Изучение конкретного процесса ..595
Изучение ряда потоков внутри процесса ..595
Изучение модулей внутри процесса ..597
Запуск и остановка процессов программным образом ..598
Домены приложений .NET ..599
Перечисление доменов приложений процесса ..601
Создание новых доменов приложений программным образом ..602
Выгрузка доменов приложений программным образом ..604
Границы контекстов объектов ..605
Контекстно-свободные и контекстно-зависимые типы ..605
Определение контекстно-зависимых объектов ..607
Инспектирование контекста объекта ..607
Подведение итогов по процессам, доменам приложений и контекстам ..609
Резюме ..609
Отношение между процессами, доменами приложений, контекстами и потоками ..610Глава 19. Язык CIL и роль динамических сборок
Проблемы параллелизма ..612
Роль синхронизации потоков ..612
Краткое описание делегатов .NET ..613
Асинхронная природа делегатов ..615
Методы BeginInvoke() и EndInvoke() ..615
Интерфейс System.IAsyncResult ..616
Вызов метода асинхронным образом ..616
Синхронизация вызывающего потока ..617
Роль делегата AsyncCallback ..618
Роль класса AsyncResult ..620
Передача и получение специальных данных о состоянии ..620
Пространство имен System.Threading ..621
Класс System.Threading.Thread ..622
Получение статистических данных о текущем потоке ..623
Свойство Name ..624
Свойство Priority ..625
Создание вторичных потоков программным образом ..625
Работа с делегатом ThreadStart ..626
Работа с делегатом ParameterizedThreadStart ..628
Приоритетные и фоновые потоки ..629
Проблемы, связанные с одновременным доступом ..630
Синхронизация с помощью ключевого слова lock в С# ..632
Синхронизация с помощью типа System.Threading.Monitor ..634
Синхронизация с помощью типа System.Threading.Interlocked ..635
Синхронизация с помощью атрибута [Synchronization] ..636
Программирование с использованием обратных вызовов таймеров ..637
Пул потоков CLR ..639
Роль компонента BackgroundWorker ..641
Работа с типом BackgroundWorker ..641
Обработка данных с помощью типа BackgroundWorker ..643
Резюме ..644
Природа программирования в терминах CIL ..645
Директивы, атрибуты и коды операций в CIL ..646
Роль директив CIL ..647
Роль атрибутов CIL ..647
Роль кодов операций CIL ..647
Разница между кодами операций и их мнемоническими эквивалентами в CIL ..647
Помещение и извлечение данных из стека в CIL ..648
Двунаправленное проектирование ..650
Роль меток в коде CIL ..653
Взаимодействие с CIL: модификация файла *.il ..653
Компиляция CIL-кода с помощью ilasm.exe ..654
Компиляция CIL-кода с помощью SharpDevelop ..656
Роль peverify.exe ..656
Директивы и атрибуты CIL ..657
Добавление ссылок на внешние сборки в CIL ..657
Определение текущей сборки в CIL ..658
Определение пространств имен в CIL ..659
Определение типов классов в CIL ..659
Определение и реализация интерфейсов ..660
Определение структур в CIL ..661
Определение перечислений ..661
Определение обобщений в CIL ..662
Компиляция файла CILTypes.il ..662
Соответствия между типами данных в библиотеке базовых классов .NET, С# и CIL ..663
Определение членов типов в CIL ..664
Определение полей данных ..664
Определение конструкторов для типов в CIL ..665
Определение свойств ..665
Определение параметров членов ..666
Изучение кодов операций в CIL ..667
Директива .maxstack ..669
Объявление локальных переменных в CIL ..670
Отображение параметров на локальные переменные в CIL ..671
Скрытая ссылка this ..671
Представление итерационных конструкций в CIL ..672
Создание сборки .NET на CIL ..672
Создание CILCars.dll ..673
Создание CILCarClient.exe ..675
Динамические сборки ..677
Пространство имен System.Reflection.Emit ..678
Роль System.Reflection.Emit.ILGenerator ..678
Создание динамической сборки ..679
Генерация сборки и набора модулей ..681
Роль типа ModuleBuilder ..682
Генерация типа HelloClass и принадлежащей ему строковой переменной ..683
Генерация конструкторов ..684
Генерация метода SayHello() ..685
Использование динамически сгенерированной сборки ..685
Резюме ..686
(окончание на следующей странице)
Страницы » 1 2
Скачать книгу: Эндрю Троелсен - Язык программирования С# 2008 и платформа .NET 3.5