Содержание - cdn1.ozone.ru · Получение доступа к...
Transcript of Содержание - cdn1.ozone.ru · Получение доступа к...
Содержание
Об авторе 31О техническом редакторе 31Благодарности 31
Введение 32
Автор и читатель — одна команда 32Краткий обзор содержания 33
Часть I. Общие сведения о языке C# и платформе .NET 33Часть II. Главные конструкции программирования на C# 34Часть III. Дополнительные конструкции программирования на C# 35Часть IV. Программирование с использованием сборок .NET 36Часть V. Введение в библиотеки базовых классов .NET 38Часть VI. Настольные пользовательские интерфейсы 39Часть VII. Построение веб-приложений с использованием ASP.NET 40Часть VIII. Приложения 41
Исходный код примеров 42От издательства 42
ЧАСТЬ I. Общие сведения о языке C# и платформе .NET 43
Глава 1. Философия .NET 44
Предыдущее состояние дел 44Подход C/Win32 API 45Подход C++/MFC 45Подход Visual Basic 6.0 45Подход Java/J2EE 46Подход COM 46Подход Windows DNA 47
Решение .NET 48Знакомство с главными компонентами платформы .NET (CLR, CTS и CLS) 48
Роль библиотек базовых классов 49Что привносит язык C# 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
Содержание 7
Что собой представляет общеязыковая исполняющая среда (CLR) 66Различия между сборками, пространствами имен и типами 67
Роль, которую исполняют пространства имен Microsoft 70Получение доступа к пространствам имен программным образом 71Добавление ссылок на внешние сборки 72
Изучение сборки с помощью утилиты ildasm.exe 73Просмотр CIL-кода 74Просмотр метаданных типов 74Просмотр метаданных сборки (т.е. манифеста) 74
Изучение сборки с помощью утилиты Reflector 75Развертывание исполняющей среды .NET 76Не зависимая от платформы природа .NET 76Резюме 78
Глава 2. Создание приложений на языке C# 79
Роль, которую исполняет .NET Framework 3.5 SDK 79Окно командной строки Visual Studio 80
Построение приложений на C# с использованием csc.exe 81Указание целевых входных и выходных параметров 82Добавление ссылок на внешние сборки 83Добавление ссылок на несколько внешних сборок 84Компиляция нескольких файлов исходного кода 84Работа с ответными файлами в C# 85
Создание .NET-приложений с использованием TextPad 87Активизация функции выделения ключевых слов C# цветом 87Настройка фильтра файлов *.cs 87Подключение к csc.exe 89Ассоциирование команд выполнения с пунктами меню 90
Создание приложений .NET с использованием Notepad++ 91Настройка списка вариантов для автоматического завершения кода 92
Создание .NET-приложений с использованием SharpDevelop 92Построение простого тестового проекта 93
Создание .NET-приложений с использованием Visual C# 2008 Express 95Некоторые уникальные функциональные возможности Visual C# 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 Test Bench 107Интегрированная система документации .NET Framework 3.5 108
Дополнительные средства разработки .NET-приложений 109Резюме 109
ЧАСТЬ II. Главные конструкции программирования на C# 111
Глава 3. Главные конструкции программирования на C#: часть I 112
Разбор простой программы на C# 112Варианты метода Main() 114Спецификация кода ошибки в приложении 114Обработка аргументов командной строки 116Указание аргументов командной строки в Visual Studio 2008 118
Содержание8
Интересное отклонение от темы: некоторые дополнительные члены класса System.Environment 118Класс System.Console 119
Базовый ввод и вывод с помощью Console 120Форматирование консольного вывода 121Форматирование числовых данных 122Форматирование числовых данных за пределами консольных приложений 123
Системные типы данных и их сокращенное обозначение в C# 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
Глава 4. Главные конструкции программирования на C#: часть II 151
Методы и модификаторы параметров 151Используемое по умолчанию поведение для передачи параметров 152Модификатор out 153Модификатор ref 154Модификатор params 155
Перегрузка методов 157Манипулирование массивами в C# 159
Синтаксис инициализации массивов в C# 160Определение массива объектов 161Работа с многомерными массивами 162Использование массивов в качестве параметров (и возвращаемых значений) 163Базовый класс System.Array 164
Тип enum 165Управление базовым типом, используемым для хранения значений перечислений 166Объявление и использование перечислений 167Тип System.Enum 168
Содержание 9
Динамическое обнаружение пар имя/значение перечисления 168Типы структур 171
Создание переменных структур 172Типы-значения и ссылочные типы 173
Типы-значения, ссылочные типы и операция присваивания 174Типы-значения, содержащие ссылочные типы 176Передача ссылочных типов по значению 178Передача ссылочных типов по ссылке 179Типы-значения и ссылочные типы: заключительные детали 180
Нулевые типы в C# 181Работа с нулевыми типами 183Операция ?? 183
Резюме 184
Глава 5. Определение инкапсулированных типов классов 185
Знакомство с типом класса C# 185Размещение объектов с помощью ключевого слова new 187
Понятие конструктора класса 188Роль конструктора по умолчанию 189Определение специальных конструкторов 189Еще раз о конструкторе по умолчанию 190
Роль ключевого слова this 191Построение цепочки вызовов конструкторов с использованием this 193Обзор потока конструктора 195
Понятие ключевого слова static 196Определение статических методов (и полей) 197Определение статических данных 197Определение статических конструкторов 200Определение статических классов 201
Основы объектно-ориентированного программирования 203Роль инкапсуляции 203Роль наследования 204Роль полиморфизма 205
Модификаторы доступа C# 206Модификаторы доступа по умолчанию 207Модификаторы доступа и вложенные типы 208
Первый принцип: службы инкапсуляции C# 208Инкапсуляция с использованием традиционных методов доступа и изменения 209Инкапсуляция с использованием свойств типа 210Внутреннее представление свойств 212Управление уровнями видимости операторов get/set свойств 214Свойства, доступные только для чтения и только для записи 214Статические свойства 215
Понятие константных данных 216Понятие полей только для чтения 217
Статические поля только для чтения 218Понятие частичных типов 218Документирование исходного кода C# посредством XML 219
Генерация файла XML 221Трансформация XML-комментариев кода посредством NDoc 223
Визуализация плодов нашего труда 224Резюме 225
Глава 6. Понятия наследования и полиморфизма 226
Базовый механизм наследования 226Спецификация родительского класса 227
Содержание10
О множественном наследовании 228Ключевое слово sealed 229
Изменение диаграмм классов Visual Studio 230Второй принцип: подробности о наследовании 231
Управление созданием базового класса с помощью ключевого слова base 233Хранение фамильных тайн: ключевое слово protected 235Добавление герметизированного класса 235
Реализация модели включения/делегации 236Понятие определения вложенных типов 238
Третий принцип: поддержка полиморфизма в C# 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
Глава 7. Структурированная обработка исключений 259
Ода ошибкам и исключениям 259Роль обработки исключений в .NET 260
Элементы обработки исключений в .NET 261Базовый класс System.Exception 262
Простейший пример 263Выдача обобщенного исключения 265Перехват исключений 266
Конфигурирование состояния исключения 267Свойство TargetSite 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
Содержание 11
Глава 8. Время жизни объектов 285
Классы, объекты и ссылки 285Базовые сведения о времени жизни объектов 286
CIL-код для new 287Установка для объектных ссылок значения null 288
Роль, которую исполняют корневые элементы приложения 289Поколения объектов 291Тип System.GC 292
Принудительная активизация процесса сборки мусора 293Создание финализируемых объектов 296
Переопределение System.Object.Finalize() 297Детали процесса финализации 299
Создание самоочищаемых объектов 299Повторное использование ключевого слова using в C# 302
Создание финализируемых и самоочищаемых типов 303Формализованный шаблон очистки 304
Резюме 306
ЧАСТЬ III. Дополнительные конструкции программирования на C# 307
Глава 9. Работа с интерфейсами 308
Что собой представляют типы интерфейсов 308Сравнение типов интерфейсов с абстрактными базовыми классами 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Указание нескольких критериев для сортировки (IComparer) 341Использование специальных свойств и специальных типов для сортировки 343
Интерфейсы обратного вызова 343Резюме 347
Глава 10. Коллекции и обобщения 348
Интерфейсы пространства имен System.Collections 348Роль ICollection 349Роль IDictionary 350Роль IDictionaryEnumerator 350Роль IList 351
Типы классов System.Collections 351Работа с типом ArrayList 352
Содержание12
Работа с типом Queue 353Работа с типом Stack 354
Пространство имен System.Collections.Specialized 355Связь между упаковкой, распаковкой и System.Object 356
Проблема с операциями упаковки/распаковки 358Проблема безопасности типов и строго типизированные коллекции 359
Построение специальной коллекции 359Проблемы упаковки и строго типизированные коллекции 361
Пространство имен System.Collections.Generic 363Исследование типа List<T> 364
Создание специальных обобщенных методов 366Выведение параметра-типа 367
Создание обобщенных структур и классов 369Ключевое слово default в обобщенном коде 369
Создание специальной обобщенной коллекции 371Ограничения специальных обобщенных коллекций 372Ограничение параметров-типов с помощью ключевого слова where 373Недостаток ограничений операций 375
Создание обобщенных базовых классов 375Создание обобщенных интерфейсов 376Резюме 378
Глава 11. Делегаты, события и лямбда-выражения 379
Понятие типа делегата .NET 379Определение делегата на C# 380Базовые классы System.MulticastDelegate и System.Delegate 382Простейший из возможных пример делегата 384
Исследование объекта делегата 385Усовершенствование типа Car с помощью делегатов 386
Включение группового вызова 389Удаление цели из списка вызовов делегата 390
Более сложный пример делегата 391Делегаты как параметры 392Анализ кода делегата 394
Понятие ковариантности делегатов 395Создание обобщенных делегатов 397
Эмуляция обобщенных делегатов без обобщений 398Понятие событий C# 399
Ключевое слово event 400“За кулисами” событий 401Прослушивание входящих событий 402Упрощенная регистрация событий с использованием Visual Studio 2008 403Аккуратное и правильное событие 404
Обобщенный делегат EventHandler<T> 406Понятие анонимных методов C# 406
Доступ к “внешним” переменным 408Понятие групповых преобразований методов 408Лямбда-операция C# 2008 410
Анализ лямбда-выражения 412Обработка аргументов внутри множественных операторов 413Усовершенствование примера CarDelegate с использованием лямбда-выражений 414Лямбда-выражения с несколькими (или нулем) параметров 415
Резюме 417
Содержание 13
Глава 12. Индексаторы, операции и указатели 418
Понятие методов-индексаторов 418Индексация объектов с использованием строковых значений 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
Директивы препроцессора C# 445Указание областей кода 445Условная компиляция кода 446
Резюме 448
Глава 13. Средства языка C# 2008 449
Понятие неявно типизированных локальных переменных 449Использование var внутри конструкций foreach 450Ограничения неявно типизированных переменных 451Неявно типизированные локальные массивы 452Неявно типизированные данные — это строго типизированные данные 453Удобство неявно типизированных локальных переменных 453
Понятие автоматических свойств 454Взаимодействие с автоматическими свойствами 455Ограничение доступа к автоматическим свойствам 456Автоматические свойства и значения по умолчанию 456
Понятие расширяющих методов 457Определение расширяющих методов 458Вызов расширяющих методов на уровне экземпляра 459Статический вызов расширяющих методов 460Область действия расширяющего метода 460Импорт типов, определяющих расширяющие методы 461Расширяющие методы в IntelliSense 462Построение и использование расширяющих библиотек 463Расширение интерфейсных типов посредством расширяющих методов 464
Содержание14
Понятие частичных методов 466Первый взгляд на частичные методы 466Применение частичных методов 468
Синтаксис инициализаторов объектов 468Вызов специальных конструкторов с синтаксисом инициализации 470Инициализация вложенных типов 471Понятие инициализации коллекций 472
Понятие анонимных типов 472Внутреннее представление анонимных типов 473Реализация ToString() и GetHashCode() 475Семантика эквивалентности анонимных типов 475Анонимные типы, содержащие в себе анонимные типы 477
Резюме 477
Глава 14. Введение в LINQ 478
Роль LINQ 478Выражения LINQ — строго типизированы и расширяемы 479Основные сборки LINQ 480
Первый взгляд на выражения запросов LINQ 481LINQ и неявно типизированные локальные переменные 483LINQ и расширяющие методы 484Роль отложенного выполнения 485Роль немедленного выполнения 486
LINQ и обобщенные коллекции 487Применение выражения LINQ 487LINQ и необобщенные коллекции 488Фильтрация данных с использованием OfTyle<T>() 489
Внутреннее представление операций запросов LINQ 489Построение выражений запросов из операций запросов 490Построение выражений запросов с использованием типа Enumerable и лямбда-выражений 491Построение выражений запросов с использованием перечислимого типа и анонимных методов 492Построение выражений запросов с использованием перечислимого типа и “сырых” делегатов 492
Исследование операций запросов C# LINQ 493Получение счетчиков с использованием Enumerable 494Построение нового тестового проекта 495
Запросы LINQ: вещь в себе? 500Трансформация результатов запроса в типы массивов 501
Резюме 502
ЧАСТЬ IV. Программирование с использованием сборок .NET 503
Глава 15. Сборки .NET 504
Определение специальных пространств имен 504Полностью квалифицированное имя типа 506Определение псевдонимов с помощью ключевого слова using 507Создание вложенных пространств имен 508Пространство имен, используемое в Visual Studio 2008 по умолчанию 509
Роль сборок .NET 510Сборки повышают возможность повторного использования кода 510Сборки определяют границы типов 511Сборки являются единицами, поддерживающими версии 511Сборки являются самоописываемыми 511Сборки поддаются конфигурированию 511
Содержание 15
Формат сборки .NET 512Заголовок файла Win32 512Заголовок файла CLR 513CIL-код, метаданные типов и манифест сборки 513Необязательные ресурсы сборки 514Однофайловые и многофайловые сборки 514
Создание и использование однофайловой сборки 515Изучение манифеста 519Исследование CIL-кода 520Исследование метаданных типов 521Создание клиентского приложения на C# 521Создание клиентского приложения на Visual Basic 523Межъязыковое наследование в действии 524
Создание и использование многофайловой сборки 524Исследование файла ufo.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Элемент <codeBase> 548Пространство имен System.Configuration 549Конфигурационный файл машины 550Резюме 551
Глава 16. Рефлексия типов, позднее связывание
и программирование с использованием атрибутов 552
Необходимость в метаданных типов 552Просмотр части метаданных перечисления EngineState 553Просмотр части метаданных типа Car 554Изучение блока TypeRef 555Просмотр метаданных самой сборки 555Просмотр метаданных внешних сборок, на которые ссылается текущая сборка 556Просмотр метаданных строковых литералов 556
Рефлексия 557Класс System.Type 557Получение информации о типе с помощью System.Object.GetType() 558
Содержание16
Получение информации о типе с помощью 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Применение предопределенных атрибутов в C# 572Указание параметров конструктора для атрибутов 574Атрибут [Obsolete] в действии 575Сокращенное обозначение атрибутов в C# 575
Создание специальных атрибутов 576Применение специальных атрибутов 576Синтаксис именованных свойств 577Ограничение использования атрибутов 577
Атрибуты уровня сборки (и уровня модуля) 578Файл AssemblyInfo.cs в Visual Studio 2008 579
Рефлексия атрибутов с использованием раннего связывания 580Рефлексия атрибутов с использование позднего связывания 581Возможное применение рефлексии, позднего связывания и специальных атрибутов на практике 582Создание расширяемого приложения 583
Создание CommonSnappableTypes.dll 583Создание оснастки на C# 584Создание подключаемого компонента в Visual Basic .NET 585Создание расширяемого приложения Windows Forms 585
Резюме 588
Глава 17. Процессы, домены приложений и контексты объектов 589
Повторный обзор традиционных процессов Win32 589Общая информация о потоках 590
Взаимодействие с процессами в рамках платформы .NET 592Перечисление выполняющихся процессов 594Изучение конкретного процесса 595Изучение ряда потоков внутри процесса 595Изучение модулей внутри процесса 597Запуск и остановка процессов программным образом 598
Домены приложений .NET 599Перечисление доменов приложений процесса 601Создание новых доменов приложений программным образом 602Выгрузка доменов приложений программным образом 604
Границы контекстов объектов 605Контекстно-свободные и контекстно-зависимые типы 605Определение контекстно-зависимых объектов 607
Содержание 17
Инспектирование контекста объекта 607Подведение итогов по процессам доменам приложений и контекстам 609Резюме 609
Глава 18. Создание многопоточных приложений 610
Отношение между процессами, доменами приложений, контекстами и потоками 610Проблемы параллелизма 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 в C# 632Синхронизация с помощью типа System.Threading.Monitor 634Синхронизация с помощью типа System.Threading.Interlocked 635Синхронизация с помощью атрибута [Synchronization] 636
Программирование с использованием обратных вызовов таймеров 637Пул потоков CLR 639Роль компонента BackgroundWorker 641
Работа с типом BackgroundWorker 641Обработка данных с помощью типа BackgroundWorker 643
Резюме 644
Глава 19. Язык CIL и роль динамических сборок 645
Природа программирования в терминах 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
Содержание18
Определение пространств имен в CIL 659Определение типов классов в CIL 659Определение и реализация интерфейсов 660Определение структур в CIL 661Определение перечислений 661Определение обобщений в CIL 662Компиляция файла CILTypes.il 662
Соответствия между типами данных в библиотеке базовых классов .NET, C# и 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
ЧАСТЬ V. Введение в библиотеки базовых классов .NET 687
Глава 20. Файловый ввод-вывод и изолированное хранилище 688
Исследование пространства имен System.IO 688Типы Directory (DirectoryInfo) и File (FileInfo) 689
Абстрактный базовый класс FileSystemInfo 690Работа с типом DirectoryInfo 691
Перечисление файлов с помощью типа DirectoryInfo 692Создание подкаталогов с помощью типа DirectoryInfo 693
Работа с типом Directory 694Работа с типом DriveInfo 695Работа с классом FileInfo 696
Метод FileInfo.Create() 697Метод FileInfo.Open() 697Методы FileOpen.OpenRead() и FileInfo.OpenWrite() 698Метод FileInfo.OpenText() 699Методы FileInfo.CreateText() и FileInfo.AppendText() 699
Работа с типом File 700Дополнительные члены File 700
Абстрактный класс Stream 701Работа с классом FileStream 703
Содержание 19
Работа с StreamWriter и StreamReader 704Запись в текстовый файл 705Чтение из текстового файла 706Прямое создание экземпляров типов StreamWriter/StreamReader 707
Работа с типами StreamWriter и StreamReader 707Работа с BinaryWriter и BinaryReader 708Программное “слежение” за файлами 710Выполнение асинхронного файлового ввода-вывода 712Роль изолированного хранилища 713
Вопрос доверия 713Другие применения программного интерфейса изолированного хранилища 714
Пример использования Code Access Security 715Роль признаков 716Роль групп кода 718Роль наборов привилегий 721Наблюдение CAS в действии 723
Обзор изолированного хранилища 724Область изолированного хранилища 725Нахождение изолированного хранилища 726Взаимодействие с изолированным хранилищем с помощью storeadm.exe 727Типы System.IO.IsolatedStorage 728
Получение хранилища посредством IsolatedStorageFile 729Запись данных в хранилище 730Чтение данных из хранилища 731Удаление пользовательских данных из хранилища 731Создание специальной структуры каталогов 732
Изолированное хранилище в действии: развертывание ClickOnce 733Атрибут IsolatedStorageFilePermission 733Ограничение зоны безопасности 734Публикация приложения на веб-сервере 734Просмотр результатов 735
Резюме 736
Глава 21. Введение в сериализацию объектов 737
Понятие сериализации объектов 737Роль графов объектов 739
Конфигурирование объектов для сериализации 740Определение сериализуемых типов 740Общедоступные поля, приватные поля и общедоступные свойства 741
Выбор форматера сериализации 742Интерфейсы IFormatter и IRemotingFormatter 742Точность типов среди форматеров 743
Сериализация объектов с использованием BinaryFormatter 744Десериализация объектов с использованием BinaryFormatter 745
Сериализация объектов с использованием SoapFormatter 746Сериализация объектов с использованием XmlSerializer 747
Контроль сгенерированных данных XML 748Сериализация коллекций объектов 749Настройка процесса сериализации 750
Углубленный взгляд на сериализацию объектов 751Настройка сериализации с использованием ISerializable 752Настройка сериализации с использованием атрибутов 754
Резюме 755
Содержание20
Глава 22. ADO.NET, часть I: подключенный уровень 756
Высокоуровневое определение ADO.NET 756Две стороны ADO.NET 758
Поставщики данных ADO.NET 758Поставщики данных ADO.NET от Microsoft 759Получение сторонних поставщиков данных ADO.NET 761
Дополнительные пространства имен ADO.NET 761Типы из пространства имен System.Data 762
Роль интерфейса IDbConnection 763Роль интерфейса IDbTransaction 764Роль интерфейса IDbCommand 764Роль интерфейсов IDbDataParameter и IDataParameter 764Роль интерфейсов IDbDataAdapter и IDataAdapter 765Роль интерфейсов IDataReader и IDataRecord 765
Абстрагирование поставщиков данных с помощью интерфейсов 766Повышение гибкости с помощью конфигурационных файлов приложения 768
Создание базы данных AutoLot 769Создание таблицы Inventory 770Создание хранимой процедуры GetPetName() 772Создание таблиц Customers и Orders 772Визуальное создание отношений между таблицами 774
Модель фабрики поставщиков данных ADO.NET 775Зарегистрированные фабрики поставщиков данных 776Полный пример фабрики поставщиков данных 776Возможные трудности с моделью фабрики поставщиков 779Элемент <connectionStrings> 779
Подключенный уровень ADO.NET 780Работа с объектами подключения 781Работа с объектами ConnectionStringBuilder 783Работа с объектами команд 784
Работа с объектами чтения данных 785Получение множественных результатов с помощью объекта чтения данных 787
Создание повторно используемой библиотеки доступа к данным 788Добавление логики подключения 789Добавление логики вставки 789Добавление логики удаления 790Добавление логики изменения 790Добавление логики выборки 791Работа с параметризованными объектами команд 792Выполнение хранимой процедуры 794
Создание консольного пользовательского интерфейса 795Реализация метода Main() 795Реализация метода ShowInstructions() 797Реализация метода ListInventory() 797Реализация метода DeleteCar() 798Реализация метода InsertNewCar() 798Реализация метода UpdateCarPetName() 798Реализация метода LookUpPetName() 799
Асинхронный доступ к данным с помощью SqlCommand 800Транзакции баз данных 801
Основные члены объекта транзакции ADO.NET 802Добавление метода транзакции в InventoryDAL 803Тестирование транзакции в нашей базе данных 804
Резюме 805
Содержание 21
Глава 23. ADO.NET, часть II: автономный уровень 806
Знакомство с автономным уровнем ADO.NET 806Роль объектов DataSet 807
Основные свойства класса DataSet 808Основные методы класса DataSet 809Создание DataSet 809
Работа с объектами DataColumn 810Создание объекта DataColumn 811Включение автоинкрементных полей 812Добавление объектов DataColumn в DataTable 812
Работа с объектами DataRow 813Свойство RowState 814Свойство DataRowVersion 815
Работа с объектами DataTable 816Вставка объектов DataTable в DataSet 817Обработка данных из DataTable с помощью объектов DataTableReader 818Сериализация объектов DataTable и DataSet в формате XML 819Сериализация объектов DataTable и DataSet в двоичном формате 820
Привязка объектов DataTable к пользовательским интерфейсам 821Заполнение DataTable из обобщенного List<T> 822Программное удаление строк 824Выборка строк с помощью фильтра 825Изменение строк 828Работа с типом DataView 829Последнее усовершенствование интерфейса: вывод номеров строк 830
Заполнение объектов DataSet и DataTable с помощью адаптеров данных 831Простой пример адаптера данных 832Замена имен из базы данных более понятными названиями 833
Пересмотр AutoLotDAL.dll 834Определение начального класса 834Настройка адаптера данных с помощью SqlCommandBuilder 834Реализация метода GetAllInventory() 836Реализация метода UpdateInventory() 836Создание клиентского интерфейса на основе Windows Forms 836
Навигация по объектам DataSet для нескольких таблиц 837Подготовка адаптеров данных 838Создание отношений между таблицами 839Изменение таблиц базы данных 840Переходы между взаимосвязанными таблицами 840
Средства доступа к данным в Visual Studio 2008 842Визуальное проектирование элементов DataGridView 843Файлы App.config и Settings.Settings 846Анализ сгенерированного DataSet 847Анализ сгенерированных объектов DataTable и DataRow 848Анализ сгенерированного адаптера данных 850Использование сгенерированных типов в коде 850
Отделение сгенерированного кода от уровня пользовательского интерфейса 852Клиентская часть пользовательского интерфейса: MultitabledDataSetApp (Redux) 854
Резюме 855
Глава 24. Программирование с использованием API-интерфейсов LINQ 856
Роль LINQ to ADO.NET 856Программирование с помощью LINQ to DataSet 857
Роль расширений DataSet 858Получение DataTable, совместимого с LINQ 859
Содержание22
Роль метода расширения DataRowExtensions.Field<T>() 860Заполнение новых DataTable из LINQ-запросов 861
Программирование с помощью LINQ to SQL 862Роль классов сущностей 862Роль типа DataContext 863Простой пример применения LINQ to SQL 863Создание строго типизированного DataContext 865Более подробно об атрибутах [Table] и [Column] 866
Генерация классов сущностей с помощью SqlMetal.exe 867Анализ сгенерированных классов сущностей 868Определение отношений с помощью классов сущностей 870Строго типизированный DataContext 870Программирование или сгенерированные типы 871
Создание классов сущностей с помощью Visual Studio 2008 872Вставка новых элементов 874Изменение существующих элементов 875Удаление существующих элементов 875
Работа с XML-документами с помощью LINQ to XML 876LINQ to XML в качестве лучшего DOM 876Пространство имен System.Xml.XLinq 876Программное создание XML-документов 877Генерация документов из LINQ-запросов 879Загрузка и просмотр XML-содержимого 879
Навигация по документу, находящемуся в памяти 880Изменение данных в XML-документе 881
Резюме 882
Глава 25. Введение в Windows Communication Foundation 883
Программные интерфейсы распределенных вычислений 883Роль DCOM 884Роль служб COM+/Enterprise Services 885Роль MSMQ 886Роль .NET Remoting 886Роль веб-служб XML 887Именованные каналы, сокеты и P2P 890
Роль WCF 890Обзор средств WCF 891Обзор сервис-ориентированной архитектуры 891WCF: итоги 892
Исследование основных сборок WCF 893Шаблоны проектов WCF в Visual Studio 894
Шаблон проекта WCF Service Website 895Базовая композиция приложения WCF 896Понятие ABC WCF 897
Понятие контрактов WCF 897Понятие привязок WCF 898Понятие адресов WCF 901
Построение службы WCF 902Атрибут [ServiceContract] 904Атрибут [OperationContract] 905Служебные типы как контракты операций 905
Хостинг службы WCF 906Установка ABC внутри файла App.config 906Кодирование с использованием типа ServiceHost 907Опции кодирования хоста 908
Содержание 23
Подробный анализ типа ServiceHost 909Подробный анализ элемента <system.serviceModel> 911Включение обмена метаданными 912
Построение клиентского приложения WCF 914Генерация кода прокси с использованием svcutil.exe 914Генерация кода прокси с использованием Visual Studio 2008 915Конфигурирование привязки на базе TCP 916
Использование шаблона проекта WCF Service Library 918Построение простой математической службы 918Тестирование службы WCF с помощью WcfTestClient.exe 919Изменение конфигурационных файлов с помощью SvcConfigEditor.exe 919
Хостинг службы WCF в виде службы Windows 921Спецификация ABC в коде 921Включение MEX 922Создание инсталлятора службы Windows 923Инсталляция службы Windows 924
Асинхронный вызов службы 924Проектирование контрактов данных WCF 926
Использование веб-ориентированного шаблона проекта WCF Service 927Реализация контракта службы 929Роль файла *.svc 930Обновление файла Web.config 930Тестирование службы 930
Резюме 931
Глава 26. Введение в Windows Workflow Foundation 932
Определение бизнес-процесса 932Роль WF 933
Строительные блоки WF 933Исполняющая система WF 934Службы ядра WF 935Первый взгляд на действия WF 936Последовательные потоки и конечные автоматы 937
Сборки, пространства имен и проекты WF 939Поддержка .NET 3.5 WF 940Шаблоны проектов рабочих процессов Visual Studio 940Проектирование рабочего потока 941
Построение простого приложения рабочего потока 942Исследование начального кода рабочего потока 942Добавление действия Code 943Добавление действия While 944
Исследование кода хостинга механизма WF 946Добавление специальных параметров запуска 947
Вызов веб-служб внутри рабочих потоков 949Создание MathWebService 949Построение WF-клиента веб-службы 951Конфигурирование действия IfElse 952Конфигурирование действий InvokeWebService 954Взаимодействие со службами WCF с использованием типа SendActivity 956
Построение многократно используемой библиотеки кода WF 960Выполнение проверки кредитоспособности 961Создание клиентского приложения Windows Forms 964
Несколько слов о специальных действиях 966Резюме 966
Содержание24
ЧАСТЬ VI. Настольные пользовательские интерфейсы 968
Глава 27. Программирование с использованием Windows Forms 969
Пространства имен Windows Forms 970Построение простого приложения Windows Forms (без IDE-среды) 971
Наполнение коллекции элементов управления 972Роль System.EventArgs и System.EventHandler 974
Шаблон проекта Windows Forms Application в Visual Studio 975Поверхность визуального дизайнера 975Внутренняя структура начальной формы 977Внутренняя структура класса Program 979Визуальное построение системы меню 979
Внутренняя структура формы 982Функциональность класса Control 983Функциональность класса Form 985Жизненный цикл типа Form 987
Реагирование на действия мыши 989Определение кнопки мыши, которой выполнен щелчок 990
Реагирование на действия клавиатуры 991Проектирование диалоговых окон 992
Свойство DialogResult 994Конфигурирование порядка табуляции 994Мастер Tab Order Wizard 995Установка в форме кнопки ввода по умолчанию 995Отображение диалоговых окон 996Понятие наследования форм 997
Визуализация графических данных с использованием GDI+ 999Пространство имен System.Drawing 1000Роль типа Graphics 1001Получение объекта Graphics через событие Paint 1002Объявление клиентской области формы недействительной 1003
Построение полноценного приложения Windows Forms 1004Построение системы главного меню 1004Определение типа ShapeData 1005Определение типа ShapePickerDialog 1006Добавление инфраструктуры к типу MainWindow 1007Реализация функциональности меню Tools 1007Захват и визуализация графического вывода 1008Реализация логики сериализации 1010
Резюме 1011
Глава 28. Введение в Windows Presentation Foundation и XAML 1012
Мотивация, лежащая в основе WPF 1012Унификация различных API-интерфейсов 1013Обеспечение отделения функциональности через XAML 1014Обеспечение оптимизированной модели визуализации 1014Дополнительные средства WPF 1015
Различные варианты приложений WPF 1015Традиционные настольные приложения 1015WPF-приложения на основе навигации 1016Приложения XBAP 1016Приложения Silverlight 1018
Исследование сборок WPF 1018Роль класса Application 1019Роль класса Window 1020Роль класса System.Windows.Controls.ContentControl 1021
Содержание 25
Роль класса System.Windows.Controls.Control 1022Роль класса System.Windows.FrameworkElement 1023Роль класса System.Windows.UIElement 1023Роль класса System.Windows.Media.Visual 1024Роль класса System.Windows.DependencyObject 1024Роль класса System.Windows.Threading.DispatcherObject 1025
Построение (свободного от XAML) приложения WPF 1025Расширение типа класса Window 1027Создание простого пользовательского интерфейса 1027
Дополнительные детали типа Application 1029Данные приложения и обработка аргументов командной строки 1029Итерация по коллекции Windows в Application 1030Дополнительные события типа Application 1030
Дополнительные детали типа Window 1031Жизненный цикл объекта Window 1031Обработка закрытия объекта Window 1032Обработка событий мыши на уровне окна 1033Обработка клавиатурных событий на уровне окна 1034
Построение (основанного на XAML) приложения WPF 1035Определение MainWindow на XAML 1035Определение объекта Application на XAML 1036Обработка файлов XAML с помощью msbuild.exe 1037
Трансформация разметки в сборку .NET 1038Отображение XAML на код C# 1039Роль BAML 1040Итоговые замечания о процессе превращения XAML в сборку 1042
Разделение ответственности с использованием файлов отделенного кода 1042Синтаксис XAML 1044
Эксперименты с XAML с применением xamlpad.exe 1044Пространства имен и ключевые слова XAML 1046Элементы и атрибуты XAML 1048Понятие синтаксиса XAML “свойство-элемент” 1049Понятие присоединяемых свойств XAML 1051Понятие о конвертерах типов XAML 1052Понятие расширений разметки XAML 1053Предварительные сведения о ресурсах и привязке данных 1055
Построение приложений WPF с использованием Visual Studio 2008 1057Шаблоны проектов WPF 1058Изменение имени начального окна 1058Визуальный дизайнер WPF 1059
Обработка XAML во время выполнения: SimpleXamlPad.exe 1061Реализация события Loaded 1063Реализация события Click объекта Button 1063Реализация события Closed 1064Тестирование приложения 1064
Роль Microsoft Expression Blend 1065Преимущества Expression Blend 1065
Резюме 1066
Глава 29. Программирование с использованием элементов управления WPF 1067
Обзор библиотеки элементов управления WPF 1067Элементы управления WPF и Visual Studio 2008 1069Подробности ищите в документации 1069
Объявление элементов управления на XAML 1070Взаимодействие с элементами управления в файлах кода 1071
Содержание26
Роль зависимых свойств 1072Исследование существующих зависимых свойств 1073Регистрация свойства зависимости 1074Определение свойства-оболочки для поля DependencyProperty 1075
Понятие маршрутизируемых событий 1076Роль пузырьковых маршрутизируемых событий 1078Продолжение или прекращения пузырькового распространения 1078Роль туннельных маршрутизируемых событий 1079
Работа с типами Button 1080Тип ButtonBase 1081Тип Button 1081Тип ToggleButton 1082Тип RepeatButton 1083
Работа с элементами CheckBox и RadioButton 1084Установка логического группирования 1085Заключение связанных элементов в рамку GroupBox 1085Заключение связанных элементов в Expander 1086
Работа с типами ListBox и ComboBox 1087Программное заполнение списковых элементов управления 1088Добавление произвольного содержимого 1089Определение текущего выбора 1090Определение текущего выбора для вложенного содержимого 1091
Работа с текстовыми областями 1092Работа с типом TextBox 1092Работа с типом PasswordBox 1093
Управление компоновкой содержимого с использованием панелей 1095Основные типы панелей WPF 1096Позиционирование содержимого внутри панелей Canvas 1097Позиционирование содержимого внутри панелей WrapPanel 1098Позиционирование содержимого внутри панелей StackPanel 1100Позиционирование содержимого внутри панелей Grid 1101Позиционирование содержимого внутри панелей DockPanel 1103Включение прокрутки в типах панелей 1104
Построение главного окна с использованием вложенных панелей 1105Построение системы меню 1106Построение типа ToolBar 1107Построение типа StatusBar 1107Завершение дизайна пользовательского интерфейса 1108Завершение реализации 1109
Понятие управляющих команд WPF 1110Внутренние объекты управляющих команд 1110Подключение команд к свойству Command 1111Подключение команд к произвольным элементам пользовательского интерфейса 1112
Понятие модели привязки данных WPF 1113Первый взгляд на привязку данных 1114Свойство DataContext 1115Свойство Mode 1116
Преобразование данных с использованием IValueConverter 1116Преобразование между различными типами данных 1118
Привязка к специальным объектам 1119Работа с типом ObservableCollection<T> 1121Создание специального шаблона данных 1122
Привязка элементов пользовательского интерфейса к документам XML 1123Построение специального диалогового окна 1123Присваивание значения DialogResult 1125Получение текущего выбора 1125
Содержание 27
Отображение специального диалогового окна 1126Резюме 1127
Глава 30. Визуализация двухмерной графики, ресурсы и темы WPF 1128
Философия служб визуализации графики WPF 1128Варианты визуализации графики WPF 1129Выбор подхода 1135
Исследование типов, производных от Shape 1136Функциональность базового класса Shape 1136
Работа с кистями WPF 1138Построение кистей сплошного цвета 1139Работа с градиентными кистями 1139Тип ImageBrush 1140
Работа с перьями WPF 1141Исследование типов-наследников Drawing 1142
Роль геометрических типов 1142Анализ простой геометрии рисования 1143Включение типов Drawing в DrawingImage 1144Включение типов Drawing в DrawingBrush 1144Более сложная геометрия для рисования 1144
Роль трансформаций пользовательского интерфейса 1146Типы-наследники Transform 1146Применение трансформаций 1147
Понятие служб анимации WPF 1148Роль типов с суффиксом Animation 1149Роль базового класса Timeline 1150Написание анимации в коде C# 1150Управление скоростью анимации 1151Обращение и зацикливание анимации 1152Описание анимации в XAML 1153Роль ключевых кадров анимации 1154
Понятие системы ресурсов WPF 1157Работа с двоичными ресурсами 1157Роль объектных (логических) ресурсов 1159
Определение и применение стилей элементов управления WPF 1159Работа с встроенными стилями 1159Работа с именованными стилями 1161Переопределение настроек стиля 1162Наследование от существующих стилей 1162Расширение стилей 1163Сужение стилей 1164Неявное назначение стилей 1164Определение стилей с триггерами 1164Программное назначение стилей 1166
Изменение элементов управления пользовательского интерфейса с помощью шаблонов 1168
Построение специального шаблона 1168Добавление триггеров к шаблонам 1169Встраивание шаблонов в стили 1170
Резюме 1172
ЧАСТЬ VII. Построение веб-приложений с использованием ASP.NET 1173
Глава 31. Построение веб-страниц ASP.NET 1174
Роль HTTP 1174Цикл запрос/ответ HTTP 1174
Содержание28
HTTP — протокол без поддержки состояния 1175Понятие веб-приложений и веб-серверов 1175
Роль виртуальных каталогов IIS 1177Сервер разработки ASP.NET 1178
Роль HTML 1179Структура документа HTML 1179Разработка форм HTML 1180Построение пользовательского интерфейса на базе HTML 1181
Роль сценариев клиентской стороны 1183Пример сценария клиентской стороны 1185Проверка достоверности данных формы default.htm 1185
Отправка данных формы (GET и POST) 1186Построение классической страницы ASP 1186Проблемы классического ASP 1188Основные преимущества ASP.NET 1.x 1189
Основные усовершенствования ASP.NET 1189Основные веб-расширения .NET 3.5 1190
Пространства имен ASP.NET 1190Модель кода веб-страницы ASP.NET 1191
Построение ориентированной на данные однофайловой тестовой страницы 1192Работа с моделью страницы с отделенным кодом 1197
Подробности структуры каталога веб-сайта ASP.NET 1201Ссылаемые сборки 1201Роль папки App _ Code 1202
Цикл компиляции страницы ASP.NET 1203Цикл компиляции для однофайловых страниц 1203Цикл компиляции многофайловых страниц 1203
Цепочка наследования типа Page 1205Взаимодействие с входящим запросом HTTP 1206
Получение статистики браузера 1207Доступ к входным данным формы 1208Свойство IsPostBack 1209
Взаимодействие с исходящим ответом HTTP 1209Выдача HTML-содержимого 1210Перенаправление пользователей 1211
Жизненный цикл веб-страницы ASP.NET 1211Роль атрибута AutoEventWireup 1213Событие Error 1213
Роль файла Web.config 1214Утилита администрирования веб-сайтов ASP.NET 1216
Резюме 1217
Глава 32. Веб-элементы управления, темы и мастер-страницы ASP.NET 1218
Природа веб-элементов управления 1218Обработка событий серверной стороны 1219Свойство AutoPostBack 1220
Тип System.Web.UI.Control 1221Перечисление содержащихся элементов управление 1221Динамическое добавление и удаление элементов управления 1223
Тип System.Web.UI.WebControls.WebControl 1224Основные категории веб-элементов управления ASP.NET 1224
Краткая информация о System.Web.UI.HtmlControls 1225Построение веб-сайта ASP.NET с развитыми средствами 1226
Работа с мастер-страницами 1226Определение страницы содержимого Default.aspx 1233
Содержание 29
Проектирование страницы содержимого Inventory.aspx 1235Проектирование страницы содержимого BuildCar.aspx 1238
Роль элементов управления проверкой достоверности 1241Тип RequiredFieldValidator 1242Тип RegularExpressionValidator 1243Тип RangeValidator 1244Тип CompareValidator 1244Создание элемента ValidationSummary 1245Определение групп проверки достоверности 1246
Работа с темами 1247Понятие файлов *.skin 1248Применение тем ко всему сайту 1250Применение тем на уровне страницы 1251Свойство SkinID 1251Программное назначение тем 1252
Позиционирование элементов управления с использованием таблиц HTML 1253Резюме 1255
Глава 33. Управление состоянием в ASP.NET 1256
Проблема поддержки состояния 1256Приемы управления состоянием ASP.NET 1258Роль состояния представления ASP.NET 1259
Демонстрация работы с состоянием представления 1259Добавление специальных данных в состояние представления 1261
Роль файла Global.asax 1262Глобальный обработчик исключений “последнего шанса” 1264Базовый класс HttpApplication 1264
Различие между Application и Session 1265Поддержка данных состояния уровня приложения 1266Модификация данных приложения 1268Обработка останова веб-приложения 1270
Работа с кэшем приложения 1270Работа с кэшированием данных 1271Модификация файла *.aspx 1273
Поддержка данных сеанса 1274Дополнительные члены HttpSessionState 1277
Понятие cookie-наборов 1278Создание cookie-наборов 1278Чтение входящих cookie-данных 1279
Роль элемента <sessionState> 1280Хранение данных сеанса на сервере состояния сеансов ASP.NET 1281Хранение информации о сеансах в выделенной базе данных 1282
Интерфейс ASP.NET Profile API 1282База данных ASPNETDB.mdf 1283Определение пользовательского профиля в web.config 1284Программный доступ к данным профиля 1285Группирование данных профиля и сохранение специальных объектов 1288
Резюме 1290
ЧАСТЬ VIII. Приложения 1291
Приложение А. Возможность взаимодействия COM и .NET 1292
Контекст взаимодействия .NET 1292Простой пример взаимодействия .NET c COM 1293
Построение клиента C# 1294
Содержание30
Исследование сборки взаимодействия .NET 1296Понятие Runtime Callable Wrapper 1298
RCW: представление типов COM как типов .NET 1298RCW: управление счетчиком ссылок на совместный класс 1299RCW: сокрытие низкоуровневых COM-интерфейсов 1300
Роль COM IDL 1300Обзор сгенерированного IDL для сервера VB COM 1302Атрибуты IDL 1303Оператор библиотеки IDL 1303Роль интерфейса [default] 1303Роль IDispatch 1304Атрибуты параметров IDL 1304
Использование библиотеки типов для построения сборки взаимодействия 1304Позднее связывание с совместным классом CoCalc 1305
Построение более сложного сервера COM 1307Поддержка дополнительного COM-интерфейса 1307Представление внутреннего объекта 1308
Исследование сборки взаимодействия 1309Построение клиентского приложения C# 1309Взаимодействие с типом CoCar 1310Перехват событий COM 1311
Понятие взаимодействия COM с .NET 1313Атрибуты System.Runtime.InteropServices 1313
Роль CCW 1314Роль интерфейса класса .NET 1315
Определение интерфейса класса 1315Построение типов .NET 1316
Определение строгого имени 1317Генерация библиотеки типов и регистрация типов .NET 1318Исследование информации экспортированного типа 1319Построение тестового клиента Visual Basic 6.0 1319Резюме 1320
Приложение Б. Независимая от платформы разработка .NET с помощью Mono 1321
Независимая от платформы природа .NET 1321Роль CLI 1322Основные дистрибутивы CLI 1323Область действия Mono 1324
Получение и инсталляция Mono 1324Исследование структуры каталогов Mono 1325
Инструменты разработки Mono 1326Работа с компиляторами C# 1327Инструменты разработки Mono, совместимые с Microsoft 1327Специфичные для Mono инструменты разработки 1328
Построение приложений .NET с использованием Mono 1329Построение библиотеки кода Mono 1329Построение консольного приложения в Mono 1332Построение клиентской программы Windows Forms 1333Выполнение приложения Windows Forms под Linux 1335
Советы по дальнейшему изучению 1335Резюме 1336
Предметный указатель 1337