25
Содержание Об авторе 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

Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

  • Upload
    others

  • View
    25

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание

Об авторе 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

Page 2: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 3: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 4: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 5: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 6: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 7: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 8: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 9: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 10: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 11: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 12: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 13: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 14: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 15: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 16: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 17: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 18: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 19: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 20: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 21: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 22: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 23: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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

Page 24: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание 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

Page 25: Содержание - cdn1.ozone.ru · Получение доступа к пространствам имен программным образом 71 Добавление ссылок

Содержание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