30

C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008
Page 2: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008
Page 3: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008
Page 4: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Äæîçåô Àëáàõàðè Áåí Àëáàõàðè

Ñàíêò-Ïåòåðáóðã

«ÁÕÂ-Ïåòåðáóðã»

2009

Page 5: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

УДК 681.3.068+800.92С# ББК 32.973.26-018.1 А45

Албахари, Дж.

А45 C# 3.0. Справочник: Пер. с англ. / Дж. Албахари, Б. Албахари. — 3-е изд. — СПб.: БХВ-Петербург, 2009. — 944 с.: ил.

ISBN 978-5-9775-0245-0

Книга представляет собой подробный справочник по программированию на языке C# 3.0, реализованном в Microsoft Visual Studio 2008. Первые главы целиком посвяще-ны языку C#, начиная с основ синтаксиса, типов и переменных и заканчивая более сложными темами, такими как небезопасный код или препроцессорные директивы. В последующих главах рассмотрено ядро .NET 3.5 Framework, LINQ, XML, коллекции, ввод/вывод и работа в сети, управление памятью, рефлексия, атрибуты, безопасность, домены приложений и взаимодействие с небезопасным кодом. В отличие от предыду-щих изданий, материал книги наряду с теоретическими основами сопровождается на-глядными практическими примерами, что позволяет сочетать глубину изложения с лег-костью понимания.

Для программистов

УДК 681.3.068+800.92С# ББК 32.973.26-018.1

Группа подготовки издания:

Главный редактор Екатерина Кондукова

Зам. главного редактора Игорь Шишигин

Зав. редакцией Григорий Добин

Перевод с английского Сергея Иноземцева

Редактор Ирина Иноземцева

Компьютерная верстка Ольги Сергиенко

Корректор Зинаида Дмитриева

Оформление обложки Елены Беляевой

Зав. производством Николай Тверских

Authorized translation of the English edition of C# 3.0 in a Nutshell, 3E, ISBN: 978-0-596-52757-0, Copyright © 2007 O'Reilly Media, Inc. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same.

Авторизованный перевод английской редакции книги C# 3.0 in a Nutshell, 3E, ISBN: 978-0-596-52757-0, Copyright © 2007 O'Reilly Media, Inc. Перевод опубликован и продается с разрешения O'Reilly Media, Inc., собственника всех прав на публикацию и продажу издания.

Ëèöåíçèÿ ÈÄ ¹ 02429 îò 24.07.00. Ïîäïèñàíî â ïå÷àòü 30.06.09. Ôîðìàò 70×1001/16.

Ïå÷àòü îôñåòíàÿ. Óñë. ïå÷. ë. 76,11. Òèðàæ 2000 ýêç. Çàêàç ¹

"ÁÕÂ-Ïåòåðáóðã", 190005, Ñàíêò-Ïåòåðáóðã, Èçìàéëîâñêèé ïð., 29.

Ñàíèòàðíî-ýïèäåìèîëîãè÷åñêîå çàêëþ÷åíèå íà ïðîäóêöèþ ¹ 77.99.60.953.Ä.003650.04.08 îò 14.04.2008 ã. âûäàíî Ôåäåðàëüíîé ñëóæáîé

ïî íàäçîðó â ñôåðå çàùèòû ïðàâ ïîòðåáèòåëåé è áëàãîïîëó÷èÿ ÷åëîâåêà.

Îòïå÷àòàíî ñ ãîòîâûõ äèàïîçèòèâîâ â ÃÓÏ "Òèïîãðàôèÿ "Íàóêà"

199034, Ñàíêò-Ïåòåðáóðã, 9 ëèíèÿ, 12

ISBN 978-0-596-52757-0 (англ.) ISBN 978-5-9775-0245-0 (рус.)

© 2007 O'Reilly Media, Inc. © Перевод на русский язык "БХВ-Петербург", 2009

Page 6: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå

Об авторах ...................................................................................................................................... 1

Предисловие ................................................................................................................................... 3

Целевая аудитория ........................................................................................................................................... 3

Как организована эта книга ............................................................................................................................. 4

Что необходимо для чтения этой книги ......................................................................................................... 4

Соглашения, использованные в книге ............................................................................................................ 5

Использование фрагментов кода .................................................................................................................... 5

Благодарности .................................................................................................................................................. 6

Глава 1. Введение в C# и .NET Framework ............................................................................... 9

Объектная ориентированность ....................................................................................................................... 9

Безопасность типов ........................................................................................................................................ 10

Управление памятью...................................................................................................................................... 10

Работа на разных платформах ....................................................................................................................... 11

Язык C# и среда CLR ..................................................................................................................................... 11

Среда CLR и платформа .NET Framework ................................................................................................... 11

Что нового в C# 3.0 ........................................................................................................................................ 13

Глава 2. Основы языка C# ......................................................................................................... 17

Первая программа на C# ................................................................................................................................ 17

Компиляция ........................................................................................................................................... 19

Синтаксис ....................................................................................................................................................... 20

Идентификаторы и ключевые слова .................................................................................................... 20

Как избежать конфликтов .................................................................................................................... 21

Контекстные ключевые слова ............................................................................................................. 21

Литералы, пунктуаторы и знаки операций .......................................................................................... 21

Комментарии ......................................................................................................................................... 22

Основные сведения о типах........................................................................................................................... 22

Примеры стандартных типов................................................................................................................ 23

Примеры пользовательских типов ....................................................................................................... 23

Члены типа ............................................................................................................................................ 24

Сходство стандартных и пользовательских типов ............................................................................ 24

Конструкторы и создание экземпляров .............................................................................................. 24

Члены экземпляра и статические члены............................................................................................. 25

Ключевое слово public ......................................................................................................................... 26

Преобразование типов .......................................................................................................................... 26

Типы значений и ссылочные типы ....................................................................................................... 26

Типы значений ...................................................................................................................................... 27

Ссылочные типы .................................................................................................................................. 27

Значение null ......................................................................................................................................... 28

Расход памяти ....................................................................................................................................... 29

Таксономия стандартных типов ........................................................................................................... 29

Page 7: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

VI Îãëàâëåíèå

Числовые типы ............................................................................................................................................... 30

Числовые литералы ............................................................................................................................... 31

Распознавание типов числовых литералов ....................................................................................... 31

Числовые суффиксы ............................................................................................................................ 31

Числовые преобразования .................................................................................................................... 32

Преобразование целого в целое ......................................................................................................... 32

Преобразование числа с плавающей точкой в число с плавающей точкой ................................... 32

Преобразование целого в число с плавающей точкой и обратно .................................................... 33

Десятичные преобразования .............................................................................................................. 33

Арифметические операции ................................................................................................................... 33

Операции инкремента и декремента .................................................................................................... 33

Специальные операции над целыми числами ..................................................................................... 34

Целочисленное деление ...................................................................................................................... 34

Целочисленное переполнение ............................................................................................................ 34

Проверка на переполнение при целочисленных арифметических операциях ............................... 34

Проверка на переполнение выражений с константами .................................................................... 35

Побитовые операции ........................................................................................................................... 35

Восьми- и шестнадцатибитовые целые ............................................................................................... 36

Специальные значения типов float и double ........................................................................................ 36

Типы double и decimal ........................................................................................................................... 37

Ошибки округления вещественных чисел ........................................................................................... 37

Тип bool и булевы операторы ....................................................................................................................... 38

Преобразование типа bool .................................................................................................................... 38

Равенство и операции сравнения ......................................................................................................... 38

Условные операции ............................................................................................................................... 39

Строки и символы .......................................................................................................................................... 40

Преобразование типа char .................................................................................................................... 41

Тип string ................................................................................................................................................ 41

Конкатенация строк ............................................................................................................................ 42

Сравнение строк .................................................................................................................................. 42

Массивы .......................................................................................................................................................... 42

Инициализация элементов по умолчанию ........................................................................................... 43

Типы значений и ссылочные типы .................................................................................................... 43

Многомерные массивы ......................................................................................................................... 44

Прямоугольные массивы .................................................................................................................... 44

Ступенчатые массивы ......................................................................................................................... 44

Упрощенные выражения для инициализации массива ...................................................................... 45

Проверка границ массива ..................................................................................................................... 46

Переменные и параметры .............................................................................................................................. 46

Стек и куча ............................................................................................................................................. 46

Стек ...................................................................................................................................................... 46

Куча ...................................................................................................................................................... 47

Определенное присваивание ................................................................................................................ 48

Значения по умолчанию ........................................................................................................................ 48

Параметры .............................................................................................................................................. 49

Передача аргументов по значению .................................................................................................... 49

Модификатор ref ................................................................................................................................. 50

Модификатор out ................................................................................................................................. 51

Особенности передачи аргументов по ссылке .................................................................................. 52

Модификатор params .......................................................................................................................... 52

Ключевое слово var

: неявная типизация локальных переменных (C# 3.0) ...................................... 53

Выражения и операции .................................................................................................................................. 54

Первичные выражения .......................................................................................................................... 54

Выражения, не имеющие значения ...................................................................................................... 54

Page 8: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå VII

Выражения присваивания ..................................................................................................................... 54

Приоритет и ассоциативность операций ............................................................................................. 55

Приоритет ............................................................................................................................................ 55

Операции с левой ассоциативностью ................................................................................................ 55

Операции с правой ассоциативностью .............................................................................................. 55

Таблица операций .................................................................................................................................. 56

Операторы ...................................................................................................................................................... 58

Операторы объявления ......................................................................................................................... 58

Локальные переменные....................................................................................................................... 58

Операторы выражений .......................................................................................................................... 59

Операторы выбора ................................................................................................................................. 60

Оператор if ........................................................................................................................................... 60

Конструкция else ................................................................................................................................. 60

Изменение хода выполнения программы с помощью операторных скобок .................................. 60

Оператор switch ................................................................................................................................... 61

Операторы цикла ................................................................................................................................... 63

Циклы while и do-while ....................................................................................................................... 63

Цикл for ................................................................................................................................................ 63

Цикл foreach ........................................................................................................................................ 64

Операторы перехода.............................................................................................................................. 64

Оператор break .................................................................................................................................... 64

Оператор continue................................................................................................................................ 65

Оператор goto ...................................................................................................................................... 65

Оператор return ................................................................................................................................... 66

Оператор throw .................................................................................................................................... 66

Прочие операторы ................................................................................................................................. 66

Пространства имен ......................................................................................................................................... 66

Ключевое слово namespace ................................................................................................................... 67

Полностью квалифицированные имена ............................................................................................... 67

Директива using ..................................................................................................................................... 67

Глобальное пространство имен ............................................................................................................ 68

Правила для пространств имен ............................................................................................................ 68

Область видимости имен .................................................................................................................... 68

Сокрытие имен .................................................................................................................................... 69

Повторяющиеся пространства имен .................................................................................................. 70

Вложенные директивы using .............................................................................................................. 70

Псевдонимы типов и пространств имен .............................................................................................. 71

Дополнительные возможности пространств имен ............................................................................. 71

Внешние пространства имен .............................................................................................................. 71

Квалификаторы псевдонимов для пространств имен ...................................................................... 72

Глава 3. Создание типов в C# ................................................................................................... 75

Классы ............................................................................................................................................................. 75

Поля ........................................................................................................................................................ 75

Модификатор readonly ........................................................................................................................ 76

Инициализация поля ........................................................................................................................... 76

Совместное объявление нескольких полей ....................................................................................... 76

Методы ................................................................................................................................................... 76

Перегрузка методов ............................................................................................................................. 77

Передача параметров по значению и ссылке .................................................................................... 77

Конструкторы экземпляров .................................................................................................................. 77

Перегрузка конструкторов .................................................................................................................. 78

Неявные конструкторы без параметров ............................................................................................ 78

Порядок выполнения конструктора и инициализации полей .......................................................... 78

Закрытые конструкторы ..................................................................................................................... 79

Page 9: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

VIII Îãëàâëåíèå

Инициализаторы объектов (C# 3.0) ..................................................................................................... 79

Ссылка this ............................................................................................................................................. 80

Свойства ................................................................................................................................................. 80

Свойства, доступные только для чтения, и вычисляемые свойства ............................................... 81

Автоматические свойства (C# 3.0)..................................................................................................... 82

Обращение к свойству методами get и set ........................................................................................ 82

Реализация свойств в CLR .................................................................................................................. 83

Индексаторы .......................................................................................................................................... 83

Реализация индексатора ..................................................................................................................... 83

Реализация индексатора в CLR .......................................................................................................... 85

Константы .............................................................................................................................................. 85

Статические конструкторы ................................................................................................................... 86

Порядок инициализации статических полей..................................................................................... 87

Недетерминизм статических конструкторов..................................................................................... 87

Статические классы ............................................................................................................................... 87

Финализаторы ........................................................................................................................................ 87

Частичные классы и методы ................................................................................................................. 88

Частичные методы (C# 3.0) ................................................................................................................ 88

Наследование .................................................................................................................................................. 89

Полиморфизм ........................................................................................................................................ 90

Приведение типов .................................................................................................................................. 91

Приведение "вверх"............................................................................................................................. 91

Приведение "вниз" .............................................................................................................................. 91

Операция as ......................................................................................................................................... 92

Операция is .......................................................................................................................................... 92

Виртуальные функции .......................................................................................................................... 92

Абстрактные классы и абстрактные члены ......................................................................................... 93

Сокрытие унаследованных членов ....................................................................................................... 94

Модификаторы new и virtual .............................................................................................................. 94

Запечатывание функций и классов ....................................................................................................... 95

Ключевое слово base ............................................................................................................................. 95

Конструкторы и наследование ............................................................................................................. 96

Неявный вызов конструктора базового класса без параметров ...................................................... 96

Порядок инициализации конструкторов и полей ............................................................................... 97

Перегрузка и разрешение конфликтов................................................................................................. 97

Тип object ........................................................................................................................................................ 98

Упаковка и распаковка .......................................................................................................................... 98

Семантика копирования при упаковке и распаковке ....................................................................... 99

Статическая и динамическая проверка типа ....................................................................................... 99

Метод GetType и операция typeof ....................................................................................................... 100

Метод ToString ..................................................................................................................................... 100

Список членов объекта ....................................................................................................................... 101

Структуры ..................................................................................................................................................... 101

Конструирование структуры .............................................................................................................. 102

Модификаторы доступа ............................................................................................................................... 102

Примеры ............................................................................................................................................... 103

Понижение уровня доступности ........................................................................................................ 103

Ограничения, накладываемые на модификаторы доступа ............................................................... 104

Интерфейсы .................................................................................................................................................. 104

Расширение интерфейса ..................................................................................................................... 105

Явная реализация интерфейса ............................................................................................................ 105

Виртуальная реализация членов интерфейса .................................................................................... 106

Новая реализация интерфейса в подклассе ....................................................................................... 107

Альтернативы реализации интерфейса ........................................................................................... 108

Page 10: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå IX

Интерфейсы и упаковка ...................................................................................................................... 108

Выбор между классом и интерфейсом............................................................................................... 109

Перечисления ............................................................................................................................................... 110

Преобразования перечислений ........................................................................................................... 110

Перечисление флагов .......................................................................................................................... 111

Операции над перечислениями .......................................................................................................... 112

Безопасность типов ............................................................................................................................. 112

Вложенные типы .......................................................................................................................................... 113

Обобщенные типы ....................................................................................................................................... 114

Объявление обобщенных типов ......................................................................................................... 115

Для чего существуют обобщенные типы .......................................................................................... 116

Обобщенные методы ........................................................................................................................... 117

Объявление обобщенных параметров ............................................................................................... 118

Операция typeof для обобщенных типов ........................................................................................... 118

Значение по умолчанию для обобщенного типа ............................................................................... 119

Ограничения для обобщенных типов ................................................................................................ 119

Обобщенные типы и ковариантность ................................................................................................ 120

Сравнение обобщенных типов и массивов ........................................................................................ 121

Создание подклассов обобщенных классов ...................................................................................... 121

Обобщенные объявления, ссылающиеся на себя.............................................................................. 122

Статические данные ............................................................................................................................ 122

Обобщенные типы C# и шаблоны С++.............................................................................................. 122

Глава 4. Более сложные элементы C# ................................................................................... 125

Делегаты ....................................................................................................................................................... 125

Написание подключаемых методов ................................................................................................... 126

Групповые делегаты ............................................................................................................................ 126

Пример группового делегата ............................................................................................................ 127

Экземплярные методы-цели ............................................................................................................... 128

Обобщенные типы делегатов ............................................................................................................. 128

Делегаты и интерфейсы ...................................................................................................................... 129

Совместимость делегатов ................................................................................................................... 130

Совместимость по типам .................................................................................................................. 130

Совместимость по параметрам ........................................................................................................ 131

Совместимость по типу возвращаемого значения .......................................................................... 131

События ........................................................................................................................................................ 132

Стандартная модель событий ............................................................................................................. 133

Методы обращения к событиям ......................................................................................................... 136

Модификаторы событий ..................................................................................................................... 138

Лямбда-выражения (C# 3.0) ........................................................................................................................ 138

Явное указание типов параметров лямбда-выражения .................................................................... 139

Обобщенные лямбда-выражения и делегаты Func ........................................................................... 140

Внешние переменные .......................................................................................................................... 140

Анонимные методы ...................................................................................................................................... 142

Операторы try и исключения ....................................................................................................................... 142

Конструкция catch ............................................................................................................................... 144

Блок finally ........................................................................................................................................... 146

Оператор using ................................................................................................................................... 146

Возбуждение исключений .................................................................................................................. 147

Повторное возбуждение исключения .............................................................................................. 147

Важнейшие свойства класса System.Exception .................................................................................. 148

Распространенные типы исключений ................................................................................................ 149

Распространенные способы программирования ............................................................................... 149

Применение метода try ..................................................................................................................... 149

Атомарность операций ..................................................................................................................... 150

Альтернативы исключениям ............................................................................................................ 151

Page 11: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

X Îãëàâëåíèå

Перечисление и итераторы .......................................................................................................................... 152

Перечисление ....................................................................................................................................... 152

Итераторы ............................................................................................................................................ 153

Семантика итераторов......................................................................................................................... 154

Формирование последовательностей ................................................................................................. 155

Конструирование перечисляемого объекта ....................................................................................... 155

Типы, допускающие значение null.............................................................................................................. 156

Значение null ........................................................................................................................................ 156

Структура Nullable<T> ..................................................................................................................... 157

Явное и неявное преобразование типов, допускающих значение null ......................................... 157

Упаковка и распаковка типов, допускающих значение null .......................................................... 157

Поднятие операций ............................................................................................................................. 158

Операции равенства .......................................................................................................................... 158

Операции отношения ........................................................................................................................ 159

Все остальные операции ................................................................................................................... 159

Смешивание разных типов ............................................................................................................... 159

Тип bool? .............................................................................................................................................. 159

Операция проверки на null ................................................................................................................. 160

Применение типов, допускающих значение null .............................................................................. 160

Альтернативы для типов, допускающих значение null .................................................................... 161

Перегрузка операций ................................................................................................................................... 162

Обзор .................................................................................................................................................... 162

Операторные функции ........................................................................................................................ 162

Перегрузка операций равенства и сравнения .................................................................................... 163

Нестандартные явные и неявные преобразования типов ................................................................. 164

Перегрузка true и false ......................................................................................................................... 165

Методы расширения (C# 3.0) ...................................................................................................................... 166

Цепочки методов расширения ............................................................................................................ 166

Устранение неоднозначности ............................................................................................................. 166

Пространства имен ............................................................................................................................ 166

Методы расширения и методы экземпляров ................................................................................... 167

Разные методы расширения ............................................................................................................. 167

Методы расширения и интерфейсы ................................................................................................... 168

Анонимные типы (C# 3.0) ........................................................................................................................... 169

Атрибуты ...................................................................................................................................................... 169

Классы атрибутов ................................................................................................................................ 170

Именованные и позиционные параметры ......................................................................................... 170

Цели атрибутов .................................................................................................................................... 171

Указание нескольких атрибутов ......................................................................................................... 171

Небезопасный код и указатели .................................................................................................................... 171

Основы работы с указателями ............................................................................................................ 171

Небезопасный код ............................................................................................................................... 172

Оператор fixed ...................................................................................................................................... 172

Операция "указатель на элемент" ....................................................................................................... 173

Массивы ............................................................................................................................................... 173

Ключевое слово stackalloc ................................................................................................................ 173

Буферы фиксированного размера .................................................................................................... 174

Конструкция void* ............................................................................................................................... 174

Указатели на неуправляемый код ...................................................................................................... 175

Препроцессорные директивы ...................................................................................................................... 175

Условные атрибуты ............................................................................................................................. 176

Прагматичный подход к предупреждениям ...................................................................................... 177

XML-документирование .............................................................................................................................. 177

Стандартные XML-теги ...................................................................................................................... 179

Page 12: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XI

Теги, определяемые пользователем ................................................................................................... 181

Перекрестные ссылки .......................................................................................................................... 181

Глава 5. Обзор возможностей платформы Framework....................................................... 183

Что нового в .NET Framework 3.5 ............................................................................................................... 184

Среда CLR и "ядро" платформы Framework .............................................................................................. 185

Системные типы .................................................................................................................................. 185

Обработка текста ................................................................................................................................. 186

Коллекции ............................................................................................................................................ 186

Запросы ................................................................................................................................................ 186

XML ...................................................................................................................................................... 186

Потоки и ввод/вывод ........................................................................................................................... 187

Работа в сети ........................................................................................................................................ 187

Сериализация ....................................................................................................................................... 187

Сборки, отражение и атрибуты .......................................................................................................... 188

Безопасность ........................................................................................................................................ 188

Нити выполнения и асинхронные методы ........................................................................................ 188

Домены приложения ........................................................................................................................... 189

Низкоуровневое взаимодействие ....................................................................................................... 189

Диагностика ......................................................................................................................................... 189

Прикладные технологии .............................................................................................................................. 189

Технологии для создания пользовательского интерфейса ............................................................... 189

ASP.NET ............................................................................................................................................. 190

WPF .................................................................................................................................................... 190

Windows Forms .................................................................................................................................. 191

Технологии работы с базами данных ................................................................................................. 192

ADO.NET ........................................................................................................................................... 192

Windows Workflow ............................................................................................................................ 193

COM+ и MSMQ ................................................................................................................................. 193

Технологии построения распределенных систем ............................................................................. 193

WCF .................................................................................................................................................... 193

Удаленное взаимодействие и веб-службы ...................................................................................... 194

CardSpace ........................................................................................................................................... 195

Глава 6. Основы Framework .................................................................................................... 197

Работа со строками и текстом ..................................................................................................................... 197

Тип char ................................................................................................................................................ 197

Строки .................................................................................................................................................. 199

Конструирование строк .................................................................................................................... 199

Пустые строки и строки со значением null ..................................................................................... 199

Обращение к символам в строке ...................................................................................................... 200

Поиск в строке ................................................................................................................................... 200

Манипулирование строками ............................................................................................................. 200

Разбиение и объединение строк ....................................................................................................... 201

Метод String.Format и строки составного формата........................................................................ 202

Сравнение строк .................................................................................................................................. 203

Выяснение порядка и культурные особенности ............................................................................. 203

Сравнение для выяснения равенства ............................................................................................... 204

Сравнение для выяснения порядка .................................................................................................. 205

Класс StringBuilder ............................................................................................................................ 206

Текстовые кодировки и Unicode......................................................................................................... 206

Получение объекта Encoding ............................................................................................................ 208

Кодировка для файлового и потокового ввода/вывода .................................................................. 208

Кодировка для байтовых массивов .................................................................................................. 208

Кодировка UTF-16 и строки ............................................................................................................. 209

Page 13: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XII Îãëàâëåíèå

Дата и время ................................................................................................................................................. 210

Структура TimeSpan ............................................................................................................................ 210

Структуры DateTime и DateTimeOffset .............................................................................................. 211

Выбор между DateTime и DateTimeOffset ....................................................................................... 212

Создание структуры DateTime ......................................................................................................... 213

Создание структуры DateTimeOffset ................................................................................................ 214

Текущие значения структур DateTime и DateTimeOffset ................................................................ 215

Работа с датой и временем ............................................................................................................... 215

Форматирование и разбор даты и времени ..................................................................................... 216

Значение null у DateTime и DateTimeOffset ..................................................................................... 217

Даты и часовые пояса .................................................................................................................................. 218

Часовые пояса и структура DateTime ................................................................................................. 218

Часовые пояса и структура DateTimeOffset ....................................................................................... 218

Классы TimeZone и TimeZoneInfo ....................................................................................................... 219

Класс TimeZone .................................................................................................................................. 219

Класс TimeZoneInfo ........................................................................................................................... 220

Структура DateTime и переход на летнее/зимнее время .................................................................. 223

Форматирование и разбор строк ................................................................................................................. 225

Методы ToString и Parse ..................................................................................................................... 225

Поставщики форматов ........................................................................................................................ 226

Поставщики форматов и класс CultureInfo ..................................................................................... 227

Поставщики NumberFormatInfo и DateTimeFormatInfo ................................................................. 227

Составное форматирование .............................................................................................................. 228

Разбор строк с помощью поставщиков форматов .......................................................................... 228

Интерфейсы IFormatProvider и ICustomFormatter ......................................................................... 229

Стандартные строки формата и флаги разбора ......................................................................................... 230

Строки формата для чисел .................................................................................................................. 231

Флаги NumberStyles ............................................................................................................................. 233

Строки формата для DateTime ............................................................................................................ 234

Разбор строк DateTime и возможные ошибки ................................................................................. 236

Флаги DateTimeStyles .......................................................................................................................... 237

Строки формата для перечисления .................................................................................................... 237

Другие механизмы преобразования ............................................................................................................ 238

Класс Convert ....................................................................................................................................... 238

Округление при преобразовании вещественных чисел в целые ................................................... 238

Системы счисления по основанию 2, 8 и 16 ................................................................................... 239

Динамические преобразования ........................................................................................................ 239

Преобразования base64 ..................................................................................................................... 240

Класс XmlConvert ................................................................................................................................. 240

Преобразователи типов ....................................................................................................................... 240

Класс BitConverter ............................................................................................................................... 241

Работа с числами .......................................................................................................................................... 242

Преобразования ................................................................................................................................... 242

Класс Math ........................................................................................................................................... 242

Класс Random....................................................................................................................................... 243

Перечисления ............................................................................................................................................... 244

Преобразования перечислений ........................................................................................................... 244

Преобразование типа enum в целочисленный тип .......................................................................... 245

Преобразование целочисленного типа в enum ................................................................................ 246

Преобразование строк ....................................................................................................................... 246

Перебор элементов перечисления ...................................................................................................... 246

Как работают перечисления ............................................................................................................... 247

Структура Guid ............................................................................................................................................. 247

Page 14: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XIII

Сравнение для выяснения равенства .......................................................................................................... 248

Равенство по значению и ссылочное равенство ............................................................................... 248

Стандартные протоколы равенства .................................................................................................... 249

Операции == и != ............................................................................................................................. 249

Виртуальный метод Object.Equals ................................................................................................... 249

Статический метод object.Equals ..................................................................................................... 250

Статический метод object.ReferenceEquals ..................................................................................... 251

Интерфейс IEquatable<T> ................................................................................................................ 252

Когда Equals не равняется операции == ......................................................................................... 252

Равенство типов, определяемых пользователем ............................................................................... 253

Как переопределить семантику равенства ...................................................................................... 254

Переопределение метода GetHashCode ........................................................................................... 254

Переопределение метода Equals ...................................................................................................... 255

Перегрузка операций == и != .......................................................................................................... 255

Реализация интерфейса IEquatable<T> .......................................................................................... 256

Пример: структура Area .................................................................................................................... 256

Подключаемые интерфейсы сравнения ........................................................................................... 257

Сравнение для выяснения порядка ............................................................................................................. 257

Интерфейсы IComparable ................................................................................................................... 258

Интерфейс IComparable и метод Equals .......................................................................................... 258

Операции < и > ................................................................................................................................... 259

Реализация интерфейсов IComparable ............................................................................................... 260

Вспомогательные классы ............................................................................................................................. 261

Класс Console ....................................................................................................................................... 261

Класс Environment ............................................................................................................................... 262

Класс Process ....................................................................................................................................... 262

Глава 7. Коллекции ................................................................................................................... 265

Перечисление ............................................................................................................................................... 265

Интерфейсы IEnumerable и IEnumerator ........................................................................................... 266

Интерфейсы IEnumerable<T> и IEnumerator<T> ............................................................................ 267

Реализация интерфейсов перечисления ............................................................................................. 268

Интерфейс IDictionaryEnumerator ..................................................................................................... 272

Интерфейсы ICollection и IList .................................................................................................................... 272

Интерфейсы ICollection и ICollection<T> ......................................................................................... 273

Интерфейсы IList и IList<T> .............................................................................................................. 274

Класс Array ................................................................................................................................................... 276

Конструирование массива и индексация его элементов .................................................................. 278

Перебор элементов массива ................................................................................................................ 279

Длина и размерность массива ............................................................................................................. 280

Поиск в массиве ................................................................................................................................... 280

Сортировка массива ............................................................................................................................ 282

Изменение порядка элементов на противоположный ...................................................................... 283

Копирование, преобразование типа и изменение размера массива ................................................ 283

Списки, очереди, стеки и множества .......................................................................................................... 284

Классы List<T> и ArrayList ................................................................................................................ 285

Класс LinkedList<T> ........................................................................................................................... 287

Классы Queue и Queue<T> ................................................................................................................. 289

Классы Stack и Stack<T> .................................................................................................................... 290

Класс BitArray ...................................................................................................................................... 291

Класс HashSet<T> ............................................................................................................................... 292

Словари ......................................................................................................................................................... 294

Интерфейсы IDictionary и IDictionary<TKey,TValue> ..................................................................... 295

Классы Dictionary<TKey,TValue> и Hashtable ................................................................................. 297

Page 15: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XIV Îãëàâëåíèå

Класс OrderedDictionary ..................................................................................................................... 298

Классы ListDictionary и HybridDictionary .......................................................................................... 299

Отсортированные словари .................................................................................................................. 299

Коллекции, настраиваемые пользователем, и прокси-классы .................................................................. 301

Классы Collection<T> и CollectionBase ............................................................................................. 301

Классы KeyedCollection<TKey,TItem> и DictionaryBase .................................................................. 304

Класс ReadOnlyCollection<T> ............................................................................................................ 306

Подключение протоколов выяснения равенства и порядка ..................................................................... 307

Интерфейсы IEqualityComparer и класс EqualityComparer ............................................................. 308

Интерфейсы IComparer и класс Comparer ........................................................................................ 310

Класс StringComparer .......................................................................................................................... 312

Глава 8. Запросы LINQ............................................................................................................. 315

Основы .......................................................................................................................................................... 315

Лямбда-запросы ........................................................................................................................................... 317

Цепочки операторов запросов ............................................................................................................ 317

Почему важны методы расширения ................................................................................................ 320

Составление лямбда-выражений ........................................................................................................ 320

Лямбда-выражения и сигнатуры делегатов Func ........................................................................... 321

Лямбда-выражения и типы элементов............................................................................................. 321

Естественный порядок элементов ...................................................................................................... 323

Прочие операторы ............................................................................................................................... 323

Синтаксис, облегчающий восприятие запроса .......................................................................................... 324

Переменные итерации ......................................................................................................................... 326

Синтаксис, облегчающий восприятие запроса, и SQL-синтаксис ................................................... 326

Синтаксис, облегчающий восприятие запроса, и лямбда-синтаксис .............................................. 327

Запросы со смешанным синтаксисом ................................................................................................ 327

Отложенное выполнение ............................................................................................................................. 328

Повторное выполнение ....................................................................................................................... 329

Внешние переменные .......................................................................................................................... 330

Механика отложенного выполнения ................................................................................................. 331

Цепочки декораторов .......................................................................................................................... 332

Как выполняются запросы .................................................................................................................. 333

Подзапросы ................................................................................................................................................... 334

Подзапросы и отложенное выполнение ............................................................................................ 337

Стратегии построения сложных запросов ................................................................................................. 338

Последовательное построение запросов ........................................................................................... 338

Ключевое слово into ............................................................................................................................ 339

Правила определения областей видимости ..................................................................................... 340

Создание оболочек для запросов ....................................................................................................... 340

Стратегии проецирования ........................................................................................................................... 342

Инициализаторы объектов .................................................................................................................. 342

Анонимные типы ................................................................................................................................. 342

Ключевое слово let .............................................................................................................................. 343

Интерпретируемые запросы ........................................................................................................................ 344

Как работают интерпретируемые запросы ........................................................................................ 346

Выполнение ....................................................................................................................................... 347

Комбинирование интерпретируемых и локальных запросов .......................................................... 349

Оператор AsEnumerable ...................................................................................................................... 350

Запросы LINQ to SQL .................................................................................................................................. 352

Классы сущностей в технологии LINQ to SQL ................................................................................. 352

Объект DataContext ............................................................................................................................. 353

Автоматическое генерирование сущностей ...................................................................................... 355

Ассоциирование .................................................................................................................................. 355

Page 16: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XV

Отложенное выполнение запросов LINQ to SQL ............................................................................. 356

Класс DataLoadOptions ....................................................................................................................... 358

Предварительное указание фильтра ................................................................................................ 358

"Нетерпеливая" загрузка ................................................................................................................... 359

Обновления .......................................................................................................................................... 359

Построение выражений для запросов ........................................................................................................ 361

Делегаты и деревья выражений .......................................................................................................... 361

Компиляция деревьев выражений ................................................................................................... 362

Оператор AsQueryable....................................................................................................................... 363

Деревья выражений ............................................................................................................................. 363

Объектная модель документов для выражений .............................................................................. 363

Глава 9. Операторы LINQ ....................................................................................................... 367

Обзор операторов ......................................................................................................................................... 368

Коллекция → коллекция ..................................................................................................................... 368

Фильтрация ........................................................................................................................................ 369

Проецирование .................................................................................................................................. 369

Объединение ...................................................................................................................................... 369

Упорядочивание ................................................................................................................................ 369

Группирование .................................................................................................................................. 369

Операции над множествами ............................................................................................................. 370

Методы преобразования: импорт ..................................................................................................... 370

Методы преобразования: экспорт .................................................................................................... 370

Коллекция → не коллекция ................................................................................................................ 370

Поэлементные операции ................................................................................................................... 370

Методы агрегирования ..................................................................................................................... 370

Квантификаторы................................................................................................................................ 370

Не коллекция → коллекция ................................................................................................................ 371

Методы генерирования коллекций .................................................................................................. 371

Фильтрация ................................................................................................................................................... 371

Оператор Where ................................................................................................................................... 372

Синтаксис, облегчающий восприятие запроса ............................................................................... 372

Реализация метода Enumerable.Where ............................................................................................. 372

Описание ............................................................................................................................................ 372

Индексированная фильтрация .......................................................................................................... 373

Оператор Where в запросе LINQ to SQL ......................................................................................... 373

Операторы Take и Skip ........................................................................................................................ 373

Операторы TakeWhile и SkipWhile ...................................................................................................... 374

Оператор Distinct ................................................................................................................................. 375

Проецирование ............................................................................................................................................. 375

Оператор Select .................................................................................................................................... 375

Синтаксис, облегчающий восприятие запроса ............................................................................... 375

Реализация в классе Enumerable ...................................................................................................... 375

Описание .............................................................................................................................................. 376

Индексированная проекция .............................................................................................................. 376

Подзапросы Select и иерархия объектов ......................................................................................... 377

Подзапросы и объединения в запросах LINQ to SQL .................................................................... 377

Проецирование в конкретные типы ................................................................................................. 379

Оператор SelectMany ........................................................................................................................... 380

Синтаксис, облегчающий восприятие запроса ............................................................................... 380

Реализация в классе Enumerable ...................................................................................................... 380

Описание ............................................................................................................................................ 381

Внешние переменные итерации ....................................................................................................... 382

Мышление в соответствии с синтаксисом, облегчающим восприятие запроса .......................... 383

Page 17: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XVI Îãëàâëåíèå

Объединение с помощью оператора SelectMany ............................................................................ 384

Оператор SelectMany в запросах LINQ to SQL ............................................................................... 385

Внешние объединения с помощью оператора SelectMany............................................................. 386

Объединение ................................................................................................................................................. 388

Операторы Join и GroupJoin ............................................................................................................... 388

Аргументы оператора Join ............................................................................................................... 388

Аргументы оператора GroupJoin ..................................................................................................... 389

Синтаксис, облегчающий восприятие запроса ............................................................................... 389

Описание ............................................................................................................................................ 389

Оператор Join .................................................................................................................................... 390

Объединение по нескольким ключам .............................................................................................. 392

Объединение в лямбда-синтаксисе .................................................................................................. 392

Оператор GroupJoin .......................................................................................................................... 393

Плоские внешние объединения ........................................................................................................ 394

Объединение и таблицы просмотра ................................................................................................. 394

Реализации в классе Enumerable ...................................................................................................... 396

Упорядочивание ........................................................................................................................................... 397

Операторы OrderBy, OrderByDescending, ThenBy и ThenByDescending.......................................... 397

Аргументы операторов OrderBy и OrderByDescending .................................................................. 397

Аргументы операторов ThenBy и ThenByDescending ..................................................................... 397

Синтаксис, облегчающий восприятие запроса ............................................................................... 398

Описание ............................................................................................................................................ 398

Классы, выполняющие сравнение, и сортировка ........................................................................... 398

Интерфейсы IOrderedEnumerable и IOrderedQueryable ................................................................ 399

Группирование ............................................................................................................................................. 400

Оператор GroupBy ............................................................................................................................... 400

Синтаксис, облегчающий восприятие запроса ............................................................................... 400

Описание ............................................................................................................................................ 400

Оператор GroupBy в запросах LINQ to SQL ................................................................................... 402

Группирование по нескольким ключам ........................................................................................... 403

Пользовательские классы для выяснения равенства ...................................................................... 403

Операции над множествами ........................................................................................................................ 403

Операторы Concat и Union ................................................................................................................. 403

Операторы Intersect и Except .............................................................................................................. 404

Методы преобразования .............................................................................................................................. 404

Операторы OfType и Cast .................................................................................................................... 405

Операторы ToArray, ToList, ToDictionary и ToLookup ...................................................................... 406

Операторы AsEnumerable и AsQueryable ........................................................................................... 407

Поэлементные операции .............................................................................................................................. 407

Операторы First, Last и Single ............................................................................................................ 408

Оператор ElementAt ............................................................................................................................. 408

Оператор DefaultIfEmpty ..................................................................................................................... 409

Методы агрегирования ................................................................................................................................ 409

Операторы Count и LongCount ........................................................................................................... 409

Операторы Min и Max ......................................................................................................................... 410

Операторы Sum и Average ................................................................................................................... 411

Оператор Aggregate ............................................................................................................................. 412

Квантификаторы .......................................................................................................................................... 412

Операторы Contains и Any .................................................................................................................. 412

Операторы All и SequenceEqual .......................................................................................................... 413

Методы генерирования коллекций ............................................................................................................. 413

Метод Empty ........................................................................................................................................ 413

Методы Range и Repeat ....................................................................................................................... 414

Page 18: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XVII

Глава 10. Запросы LINQ to XML ............................................................................................ 415

Обзор архитектуры ...................................................................................................................................... 415

Что такое DOM? .................................................................................................................................. 415

DOM в технологии запросов LINQ to XML ...................................................................................... 416

Обзор модели X-DOM ................................................................................................................................. 416

Загрузка и синтаксический анализ ..................................................................................................... 418

Сохранение и сериализация ................................................................................................................ 419

Создание экземпляра дерева X-DOM ......................................................................................................... 420

Функциональное конструирование .................................................................................................... 420

Указание содержимого ....................................................................................................................... 421

Автоматическое глубокое клонирование .......................................................................................... 422

Навигация и отправка запросов .................................................................................................................. 423

Навигация по узлам-потомкам ........................................................................................................... 423

Методы FirstNode, LastNode и Nodes .............................................................................................. 424

Чтение элементов .............................................................................................................................. 424

Чтение одного элемента .................................................................................................................... 425

Рекурсивные функции ....................................................................................................................... 426

Навигация по родительским элементам ............................................................................................ 426

Навигация по элементам одного уровня ........................................................................................... 427

Навигация по атрибутам ..................................................................................................................... 428

Редактирование дерева X-DOM .................................................................................................................. 428

Обновление простых значений........................................................................................................... 428

Редактирование узлов-потомков и атрибутов ................................................................................... 429

Обновление узла через его родителя ................................................................................................. 430

Удаление последовательности узлов и атрибутов .......................................................................... 430

Работа со значениями .................................................................................................................................. 431

Установка значений............................................................................................................................. 432

Чтение значений .................................................................................................................................. 432

Значения и узлы со смешанным содержимым .................................................................................. 433

Автоматическая конкатенация элементов XText ............................................................................... 434

Документы и объявления............................................................................................................................. 434

Класс XDocument ................................................................................................................................. 434

XML-объявления ................................................................................................................................. 436

Запись объявления в строку ............................................................................................................. 437

Имена и пространства имен ........................................................................................................................ 438

Пространства имен в XML ................................................................................................................. 438

Префиксы ........................................................................................................................................... 439

Атрибуты ........................................................................................................................................... 440

Указание пространства имен в модели X-DOM ............................................................................... 440

X-DOM и пространства имен по умолчанию .................................................................................... 441

Префиксы ........................................................................................................................................... 443

Аннотации .................................................................................................................................................... 444

Проецирование в модель X-DOM ............................................................................................................... 445

Исключение пустых элементов .......................................................................................................... 447

Проецирование в поток ....................................................................................................................... 448

Преобразование дерева X-DOM ......................................................................................................... 449

Более сложные преобразования ....................................................................................................... 450

Глава 11. Другие XML-технологии ........................................................................................ 453

Класс XmlReader ........................................................................................................................................... 453

Чтение узлов ........................................................................................................................................ 455

Чтение элементов ................................................................................................................................ 457

Необязательные элементы ................................................................................................................ 458

Произвольный порядок элементов ................................................................................................... 458

Пустые элементы ............................................................................................................................... 459

Другие методы семейства ReadXXX................................................................................................. 459

Page 19: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XVIII Îãëàâëåíèå

Чтение атрибутов................................................................................................................................. 461

Узлы-атрибуты .................................................................................................................................. 461

Пространства имен и префиксы ......................................................................................................... 462

Класс XmlWriter ................................................................................................................................... 463

Запись атрибутов ................................................................................................................................. 464

Запись узлов других типов ................................................................................................................. 464

Пространства имен и префиксы ......................................................................................................... 465

Примеры использования классов XmlReader и XmlWriter ........................................................................ 465

Работа с иерархическими структурами ............................................................................................. 465

Комбинирование класса XmlReader или XmlWriter с моделью X-DOM ......................................... 468

Использование XmlReader с типом XElement.................................................................................. 468

Использование XmlWriter с типом XElement ................................................................................... 469

Класс XmlDocument ...................................................................................................................................... 470

Загрузка и сохранение объекта XmlDocument ................................................................................... 471

Обход дерева XmlDocument ................................................................................................................ 471

Свойства InnerText и InnerXml............................................................................................................ 472

Создание узлов и манипуляции с ними ............................................................................................. 472

Пространства имен .............................................................................................................................. 473

Язык XPath.................................................................................................................................................... 474

Самые распространенные операторы XPath ..................................................................................... 475

Класс XPathNavigator .......................................................................................................................... 476

Выдача запросов с учетом пространств имен ................................................................................... 477

Класс XPathDocument .......................................................................................................................... 478

XSD и проверка корректности документа ................................................................................................. 478

Проверка соответствия схеме ............................................................................................................. 479

Проверка с помощью класса XmlReader.......................................................................................... 479

Проверка дерева X-DOM или объекта XmlDocument ..................................................................... 481

XSLT ............................................................................................................................................................. 481

Глава 12. Удаление объектов и сборка мусора .................................................................... 483

Интерфейс IDisposable и методы Dispose и Close ..................................................................................... 483

Стандартная семантика удаления объектов ...................................................................................... 484

Методы Close и Stop .......................................................................................................................... 485

Когда следует удалять объекты .......................................................................................................... 485

Условное удаление .............................................................................................................................. 486

Сборка мусора и финализаторы .................................................................................................................. 488

Вызов метода Dispose из финализатора ..................................................................................................... 490

Как работает сборщик мусора ..................................................................................................................... 491

Приемы оптимизации .......................................................................................................................... 492

Принудительная сборка мусора ......................................................................................................... 492

Альтернативы сборке мусора ...................................................................................................................... 493

Глава 13. Потоки и ввод/вывод .............................................................................................. 495

Архитектура потоков ................................................................................................................................... 495

Работа с потоками ........................................................................................................................................ 497

Чтение и запись ................................................................................................................................... 498

Перемещение внутри потока .............................................................................................................. 499

Закрытие и очистка буфера ................................................................................................................ 500

Тайм-ауты ............................................................................................................................................. 500

Безопасность работы нитей с потоками ............................................................................................ 500

Поток с резервным хранилищем ........................................................................................................ 501

Класс FileStream .................................................................................................................................. 501

Конструирование объекта FileStream .............................................................................................. 501

Указание имени файла ...................................................................................................................... 502

Page 20: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XIX

Указание режима FileMode .............................................................................................................. 502

Дополнительные характеристики класса FileStream ...................................................................... 504

Класс MemoryStream ........................................................................................................................... 504

Класс PipeStream ................................................................................................................................. 505

Именованные каналы ........................................................................................................................ 506

Анонимные каналы ........................................................................................................................... 507

Класс BufferedStream ........................................................................................................................... 509

Потоковые адаптеры .................................................................................................................................... 510

Текстовые адаптеры ............................................................................................................................ 510

Классы StreamReader и StreamWriter .............................................................................................. 512

Кодировки символов ......................................................................................................................... 513

Классы StringReader и StringWriter ................................................................................................. 515

Двоичные адаптеры ............................................................................................................................. 515

Закрытие и удаление адаптеров потоков ........................................................................................... 516

Операции с файлами и каталогами ............................................................................................................. 517

Класс File ............................................................................................................................................. 518

Атрибуты архивирования и шифрования ....................................................................................... 519

Безопасность файла ........................................................................................................................... 520

Класс Directory .................................................................................................................................... 521

Классы FileInfo и DirectoryInfo........................................................................................................... 522

Класс Path ............................................................................................................................................ 523

Специальные папки ............................................................................................................................. 524

Получение информации о томе .......................................................................................................... 525

Слежение за событиями файловой системы ..................................................................................... 525

Сжатие файлов ............................................................................................................................................. 526

Сжатие данных в памяти..................................................................................................................... 528

Изолированная память ................................................................................................................................. 528

Виды изоляции .................................................................................................................................... 529

Чтение и запись в изолированную память......................................................................................... 531

Местоположение изолированной памяти .......................................................................................... 532

Перебор элементов изолированной памяти ...................................................................................... 533

Глава 14. Работа в сети............................................................................................................. 535

Архитектура сети ......................................................................................................................................... 535

Адреса и порты ............................................................................................................................................. 537

URI ................................................................................................................................................................ 538

Архитектура "запрос/ответ" ........................................................................................................................ 540

Класс WebClient ................................................................................................................................... 541

Классы WebRequest и WebResponse .................................................................................................... 542

Прокси-серверы ................................................................................................................................... 543

Аутентификация .................................................................................................................................. 544

Класс CredentialCache ...................................................................................................................... 546

Параллелизм......................................................................................................................................... 546

Обработка исключений ....................................................................................................................... 548

Поддержка протокола HTTP ....................................................................................................................... 549

Заголовки ............................................................................................................................................. 549

Строки запросов .................................................................................................................................. 550

Выгрузка данных формы .................................................................................................................... 550

Cookie ................................................................................................................................................... 551

Аутентификация с помощью форм .................................................................................................... 553

SSL ........................................................................................................................................................ 554

Создание HTTP-сервера .............................................................................................................................. 554

Работа с протоколом FTP ............................................................................................................................ 558

Работа с DNS ................................................................................................................................................ 560

Page 21: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XX Îãëàâëåíèå

Отправка почты с помощью класса SmtpClient ......................................................................................... 560

Работа с протоколом ТСР ............................................................................................................................ 561

Параллелизм и TCP ............................................................................................................................. 564

Прием POP3-почты с помощью протокола ТСР ....................................................................................... 565

Глава 15. Сериализация ........................................................................................................... 567

Концепции сериализации ............................................................................................................................ 567

Механизмы сериализации ................................................................................................................... 567

Зачем нужны три механизма? .......................................................................................................... 568

Сериализатор с контрактом данных ................................................................................................ 569

Двоичный сериализатор ................................................................................................................... 569

Класс XmlSerializer ............................................................................................................................ 570

Интерфейс IXmlSerializable .............................................................................................................. 570

Форматеры ........................................................................................................................................... 570

Явная и неявная сериализация ........................................................................................................... 571

Сериализатор с контрактом данных ........................................................................................................... 571

Классы DataContractSerializer и NetDataContractSerializer ............................................................. 572

Применение сериализаторов .............................................................................................................. 573

Использование двоичного форматера ............................................................................................. 575

Сериализация подклассов ................................................................................................................... 575

Ссылки на объекты .............................................................................................................................. 577

Сохранение ссылок на объекты ....................................................................................................... 578

Устойчивость к изменению версии .................................................................................................... 579

Необходимые члены типа ................................................................................................................. 580

Порядок следования членов ........................................................................................................................ 580

Пустое значение и значение null ........................................................................................................ 581

Контракты данных и коллекции ................................................................................................................. 582

Элементы коллекции с подклассами .................................................................................................. 583

Изменение имен коллекций и элементов ........................................................................................... 583

Расширение контрактов данных ................................................................................................................. 585

Инструменты сериализации и десериализации ................................................................................. 585

Взаимодействие с типом, помеченным как [Serializable] ................................................................ 586

Взаимодействие с типом, реализующим интерфейс IXmlSerializable ............................................. 588

Двоичный сериализатор .............................................................................................................................. 588

С чего начать ....................................................................................................................................... 589

Атрибуты двоичной сериализации ............................................................................................................. 590

Атрибут [NonSerialized] ...................................................................................................................... 590

Атрибуты [OnDeserializing] и [OnDeserialized] ............................................................................... 591

Атрибуты [OnSerializing] и [OnSerialized]........................................................................................ 592

Атрибут [OptionalField] и сопровождение версий ........................................................................... 593

Двоичная сериализация и интерфейс ISerializable .................................................................................... 594

Создание подклассов сериализуемых классов .................................................................................. 596

XML-сериализация ...................................................................................................................................... 597

Сериализация на основе атрибутов .................................................................................................... 598

Атрибуты, имена и пространства имен ........................................................................................... 599

Порядок следования XML-элементов .............................................................................................. 600

Подклассы и объекты-потомки .......................................................................................................... 600

Образование подкласса от корневого типа ..................................................................................... 600

Сериализация объектов-потомков ................................................................................................... 601

Подклассы объектов-потомков ........................................................................................................ 602

Сериализация коллекций .................................................................................................................... 603

Работа с элементами коллекций, имеющими подклассы ............................................................... 605

Интерфейс IXmlSerializable ................................................................................................................ 605

Page 22: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XXI

Глава 16. Сборки ....................................................................................................................... 609

Что такое сборка .......................................................................................................................................... 609

Манифест сборки ................................................................................................................................. 610

Указание атрибутов сборки .............................................................................................................. 611

Манифест приложения ........................................................................................................................ 611

Развертывание манифеста приложения ........................................................................................... 611

Модули ................................................................................................................................................. 612

Класс Assembly ..................................................................................................................................... 613

Подписание сборки ...................................................................................................................................... 614

Как подписать сборку ......................................................................................................................... 615

Отсроченное подписание .................................................................................................................... 616

Имена сборок ................................................................................................................................................ 617

Полностью квалифицированные имена ............................................................................................. 618

Класс AssemblyName ............................................................................................................................ 618

Глобальный кэш сборок .............................................................................................................................. 619

Как устанавливать сборки в глобальном кэше сборок ..................................................................... 620

Глобальный кэш сборок и отслеживание версий .............................................................................. 621

Ресурсы и вспомогательные сборки ........................................................................................................... 622

Непосредственное встраивание ресурсов .......................................................................................... 623

Файлы .resources .................................................................................................................................. 624

Файлы .resx........................................................................................................................................... 625

Создание .resx-файла из командной строки .................................................................................... 625

Чтение файлов .resources .................................................................................................................. 626

Создание URI типа "pack" в Visual Studio ....................................................................................... 627

Вспомогательные сборки .................................................................................................................... 627

Построение вспомогательных сборок.............................................................................................. 628

Тестирование вспомогательных сборок .......................................................................................... 629

Поддержка Visual Studio ................................................................................................................... 629

Культуры и субкультуры..................................................................................................................... 630

Поиск и загрузка сборок .............................................................................................................................. 631

Правила поиска сборок и типов ......................................................................................................... 631

Событие AssemblyResolve .................................................................................................................... 632

Загрузка сборок ................................................................................................................................... 632

Загрузка из файла .............................................................................................................................. 633

Развертывание сборок за пределами базового каталога ........................................................................... 634

Упаковка однофайлового приложения ....................................................................................................... 636

Избирательное наложение "заплат" ................................................................................................... 637

Работа со сборками, на которые нет ссылок .............................................................................................. 637

Глава 17. Отражение и метаданные....................................................................................... 641

Отражение и активизация типов ................................................................................................................. 641

Получение экземпляра класса Type .................................................................................................... 641

Получение типов массивов ............................................................................................................... 642

Получение вложенных типов ........................................................................................................... 643

Имена типов ......................................................................................................................................... 643

Имена вложенных типов ................................................................................................................... 644

Имена обобщенных типов ................................................................................................................ 644

Имена массивов и типов указателей ................................................................................................ 644

Имена типов параметров с модификаторами ref и out ................................................................... 644

Базовые типы и интерфейсы ............................................................................................................... 645

Создание экземпляров типов .............................................................................................................. 645

Обобщенные типы ............................................................................................................................... 647

Отражение и вызов членов .......................................................................................................................... 647

Типы-члены .......................................................................................................................................... 649

Члены C# и члены CLR ....................................................................................................................... 651

Page 23: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XXII Îãëàâëåíèå

Члены обобщенных типов .................................................................................................................. 652

Динамический вызов члена ................................................................................................................ 653

Параметры методов ............................................................................................................................. 653

Повышение производительности с помощью делегатов ................................................................. 654

Обращение к закрытым членам .......................................................................................................... 654

Перечисление BindingFlags .............................................................................................................. 655

Обобщенные методы ........................................................................................................................... 656

Анонимный вызов членов обобщенного типа .................................................................................. 656

Отражение сборок ........................................................................................................................................ 658

Загрузка сборки в контекст, допускающий только отражение ........................................................ 659

Модули ................................................................................................................................................. 659

Работа с атрибутами..................................................................................................................................... 660

Основы работы с атрибутами ............................................................................................................. 660

Атрибут AttributeUsage ....................................................................................................................... 661

Определение собственного атрибута ................................................................................................. 662

Чтение атрибутов на этапе выполнения ............................................................................................ 663

Получение атрибутов в контексте отражения ................................................................................... 665

Динамическое генерирование кода ............................................................................................................ 665

Генерирование IL-кода с помощью класса DynamicMethod ............................................................ 665

Стек вычислений ................................................................................................................................. 667

Передача параметров классу DynamicMethod ................................................................................... 668

Генерирование локальных переменных............................................................................................. 669

Ветвление ............................................................................................................................................. 670

Создание объектов и вызов экземплярных методов ......................................................................... 670

Обработка исключений ....................................................................................................................... 672

Генерирование сборок и типов ................................................................................................................... 673

Сохранение порожденных сборок ..................................................................................................... 674

Объектная модель Reflection.Emit ...................................................................................................... 675

Генерирование членов типа ........................................................................................................................ 676

Генерирование методов ...................................................................................................................... 677

Генерирование методов экземпляров .............................................................................................. 678

Атрибут HideBySig ............................................................................................................................ 678

Генерирование полей и свойств ......................................................................................................... 679

Генерирование конструкторов ........................................................................................................... 680

Вызов конструкторов базовых классов ........................................................................................... 681

Добавление атрибутов ......................................................................................................................... 682

Генерирование обобщенных методов и типов........................................................................................... 682

Определение обобщенных методов ................................................................................................... 682

Определение обобщенных типов ....................................................................................................... 684

Неудобные цели генерирования ................................................................................................................. 684

Несозданные замкнутые обобщенные типы ...................................................................................... 684

Циклические зависимости .................................................................................................................. 685

Анализ IL-кода ............................................................................................................................................. 688

Написание дизассемблера ................................................................................................................... 688

Глава 18. Безопасность ............................................................................................................. 695

Разрешения ................................................................................................................................................... 695

Классы CodeAccessPermission и PrincipalPermission ....................................................................... 696

Интерфейс IPermission ...................................................................................................................... 697

Класс PermissionSet ............................................................................................................................. 698

Декларативная и принудительная безопасность ............................................................................... 699

Безопасность обращения к коду ................................................................................................................. 699

Как CLR выделяет разрешения .......................................................................................................... 701

Page 24: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XXIII

Работа в изоляции ........................................................................................................................................ 703

Необязательные разрешения .............................................................................................................. 704

Флаг SecurityAction.RequestOptional ................................................................................................ 704

Изоляция другой сборки .............................................................................................................................. 705

Требования связывания и частичное доверие к вызывающему коду .............................................. 706

Как утверждать права .......................................................................................................................... 707

Безопасность в операционной системе....................................................................................................... 708

Работа под стандартной пользовательской учетной записью ......................................................... 709

Повышение прав и виртуализация ..................................................................................................... 710

Безопасность, основанная на именах и ролях ............................................................................................ 711

Указание пользователей и ролей ........................................................................................................ 712

Обзор криптографических возможностей ................................................................................................. 713

Защита данных Windows ............................................................................................................................. 713

Хеширование ................................................................................................................................................ 714

Симметричное шифрование ........................................................................................................................ 716

Шифрование в памяти......................................................................................................................... 717

Образование цепочек из потоков шифрования ................................................................................. 719

Уничтожение шифрующих объектов ................................................................................................ 720

Управление ключами .......................................................................................................................... 721

Шифрование с открытым ключом и постановка цифровой подписи ...................................................... 721

Класс RSA ............................................................................................................................................. 722

Цифровая подпись ............................................................................................................................... 723

Глава 19. Нити выполнения .................................................................................................... 725

Правильное использование нитей ............................................................................................................... 725

Основы .......................................................................................................................................................... 726

Передача данных ................................................................................................................................. 729

Совместное обращение к данным ...................................................................................................... 730

Пулы нитей .......................................................................................................................................... 731

Оптимизация пула ............................................................................................................................. 733

Приоритетные и фоновые нити .......................................................................................................... 734

Приоритет нити ................................................................................................................................... 735

Обработка исключений ....................................................................................................................... 736

Асинхронные делегаты ................................................................................................................................ 737

Синхронизация ............................................................................................................................................. 739

Приостановка выполнения ................................................................................................................. 740

Приостановка и работа вхолостую .................................................................................................... 741

Метод SpinWait .................................................................................................................................. 741

Блокировка .................................................................................................................................................... 741

Выбор синхронизирующего объекта ................................................................................................. 743

Вложенные блокировки ...................................................................................................................... 744

Когда ставить блокировку .................................................................................................................. 744

Блокировка и атомарность .................................................................................................................. 745

Производительность кода, соперничество блокировок и взаимные блокировки .......................... 745

Класс Mutex .......................................................................................................................................... 746

Класс Semaphore .................................................................................................................................. 747

Безопасность нитей ...................................................................................................................................... 748

Безопасность нитей и типы .NET Framework .................................................................................... 750

Блокирование безопасных объектов ................................................................................................ 751

Статические методы .......................................................................................................................... 751

Безопасность нитей в серверах приложений ..................................................................................... 752

Безопасность нитей в многофункциональных клиентских приложениях ...................................... 753

Незадерживающая синхронизация ............................................................................................................. 754

Атомарность и класс Interlocked ........................................................................................................ 754

Барьеры памяти и некэшируемость ................................................................................................... 756

Page 25: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XXIV Îãëàâëåíèå

Сигнализация с помощью дескрипторов ожидания событий .................................................................. 757

Создание и уничтожение дескрипторов ожидания........................................................................... 759

Двухсторонняя сигнализация ............................................................................................................. 760

Создание объекта EventWaitHandle для нескольких процессов ...................................................... 761

Пул дескрипторов ожидания .............................................................................................................. 761

Методы WaitAny, WaitAll и SignalAndWait ........................................................................................ 763

Сигнализация с помощью методов Wait и Pulse ....................................................................................... 763

Как пользоваться методами Wait и Pulse ........................................................................................... 764

Очередь "производитель/потребитель" ............................................................................................. 767

Тайм-ауты метода Wait ....................................................................................................................... 770

Двухсторонняя сигнализация ............................................................................................................. 771

Имитация дескрипторов ожидания .................................................................................................... 773

Методы Interrupt и Abort ............................................................................................................................. 774

Метод Interrupt .................................................................................................................................... 774

Метод Abort.......................................................................................................................................... 776

Безопасное завершение ....................................................................................................................... 776

Локальное хранение данных ....................................................................................................................... 777

Класс BackgroundWorker ............................................................................................................................. 778

Создание подкласса для BackgroundWorker ...................................................................................... 782

Класс ReaderWriterLockSlim ........................................................................................................................ 783

Обновляемые блокировки и рекурсия ............................................................................................... 785

Рекурсия блокировок ........................................................................................................................ 787

Таймеры ........................................................................................................................................................ 788

Многонитевые таймеры ...................................................................................................................... 788

Однонитевые таймеры ........................................................................................................................ 790

Глава 20. Асинхронные методы .............................................................................................. 793

Для чего существуют асинхронные методы .............................................................................................. 793

Сигнатуры асинхронных методов ............................................................................................................... 794

Асинхронные методы и асинхронные делегаты ........................................................................................ 795

Применение асинхронных методов ............................................................................................................ 796

Написание асинхронных методов ............................................................................................................... 799

Поддельные асинхронные методы .............................................................................................................. 802

Альтернативы асинхронным методам ........................................................................................................ 803

Асинхронные события ................................................................................................................................. 804

Глава 21. Домены приложений ............................................................................................... 805

Архитектура доменов приложений ............................................................................................................. 805

Создание и уничтожение доменов приложений ........................................................................................ 805

Работа с несколькими доменами приложения ........................................................................................... 808

Метод DoCallBack ........................................................................................................................................ 810

Домены и нити ............................................................................................................................................. 811

Совместное обращение к данным из разных доменов .............................................................................. 812

Применение слотов ............................................................................................................................. 812

Удаленное взаимодействие внутри процесса .................................................................................... 813

Изолирование типов и сборок ............................................................................................................ 815

Раскрытие типа .................................................................................................................................. 817

Глава 22. Интеграция с DLL ................................................................................................... 819

Вызов кода из DLL ....................................................................................................................................... 819

Маршалинг обычных типов ........................................................................................................................ 820

Маршалинг классов и структур................................................................................................................... 821

Входной и выходной маршалинг ................................................................................................................ 822

Обратные вызовы из неуправляемого кода ................................................................................................ 823

Page 26: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îãëàâëåíèå XXV

Имитация объединения из языка С............................................................................................................. 824

Совместно используемая память ................................................................................................................ 825

Отображение структуры в неуправляемую память ................................................................................... 827

Ключевое слово fixed........................................................................................................................... 830

Справочник по атрибутам ........................................................................................................................... 831

Атрибут DllImport ............................................................................................................................... 831

Атрибут StructLayout ........................................................................................................................... 832

Атрибут FieldOffset.............................................................................................................................. 833

Атрибут MarshalAs .............................................................................................................................. 833

Элементы перечисления UnmanagedType ....................................................................................... 834

Глава 23. Диагностика.............................................................................................................. 837

Условная компиляция .................................................................................................................................. 837

Условная компиляция как альтернатива статическим переменным-флагам .................................. 838

Атрибут Conditional ............................................................................................................................ 839

Альтернативы атрибуту Conditional ................................................................................................ 840

Классы Debug и Trace .................................................................................................................................. 840

Класс TraceListener .............................................................................................................................. 841

Принудительная запись на диск и закрытие слушателей ................................................................. 843

Интеграция с отладчиком ............................................................................................................................ 843

Присоединение отладчика и прерывание выполнения ..................................................................... 844

Атрибуты отладчика............................................................................................................................ 844

Процессы и нити .......................................................................................................................................... 845

Анализ работающего процесса ........................................................................................................... 845

Анализ нитей в процессе..................................................................................................................... 845

Классы StackTrace и StackFrame ................................................................................................................. 846

Журнал событий Windows ........................................................................................................................... 848

Запись в журнал событий.................................................................................................................... 848

Чтение журнала событий .................................................................................................................... 849

Мониторинг журнала событий ........................................................................................................... 849

Счетчики производительности ................................................................................................................... 850

Просмотр доступных счетчиков ......................................................................................................... 851

Чтение данных из счетчиков производительности ........................................................................... 852

Создание счетчиков и запись данных о производительности ......................................................... 853

Класс Stopwatch ............................................................................................................................................ 855

Глава 24. Регулярные выражения .......................................................................................... 857

Основы регулярных выражений ................................................................................................................. 857

Откомпилированные регулярные выражения ................................................................................... 858

Перечисление RegexOptions ................................................................................................................ 859

Экранирование символов .................................................................................................................... 860

Множества символов .......................................................................................................................... 861

Квантификаторы .......................................................................................................................................... 862

"Жадные" и "ленивые" квантификаторы ........................................................................................... 863

Директивы нулевой длины .......................................................................................................................... 863

Просмотр вперед и просмотр назад ................................................................................................... 864

Якоря .................................................................................................................................................... 865

Границы слов ....................................................................................................................................... 866

Группы .......................................................................................................................................................... 866

Именованные группы .......................................................................................................................... 867

Замещение и разбивка на части .................................................................................................................. 868

Делегат MatchEvaluator ...................................................................................................................... 869

Разбивка текста .................................................................................................................................... 869

Page 27: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

XXVI Îãëàâëåíèå

Сборник рецептов по регулярным выражениям ........................................................................................ 870

Рецепты ................................................................................................................................................ 870

Шаблон для номера социальной страховки или номера телефона в США .................................. 870

Извлечение пар "имя=значение" (по одной в строчке текста)....................................................... 870

Проверка сильного пароля................................................................................................................ 870

Строки длиной не менее 80 символов ............................................................................................. 870

Разбор даты и времени ...................................................................................................................... 871

Шаблон для римских чисел .............................................................................................................. 871

Удаление повторяющихся слов ........................................................................................................ 871

Подсчет слов ...................................................................................................................................... 872

Шаблон для глобального уникального идентификатора ................................................................ 872

Разбор XML-тега ............................................................................................................................... 872

Разбивка на части слова, написанного в стиле camel ..................................................................... 872

Получение допустимого имени файла ............................................................................................. 872

Экранирование символов Unicode для HTML-кода ....................................................................... 873

Справочник по языку регулярных выражений .......................................................................................... 873

Приложение 1. Ключевые слова языка C# ........................................................................... 879

Приложение 2. Соответствие сборок пространствам имен ............................................... 889

Предметный указатель ............................................................................................................. 899

Page 28: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Îá àâòîðàõ

Джозеф Албахари (Joseph Albahari) работает руководителем программных проек-

тов на C# в австралийской компании Egton Software Services, которая является

партнером крупнейшего производителя программных продуктов для здравоохране-

ния в Великобритании. Он более 15 лет занимается разработкой крупных коммер-

ческих приложений на .NET и других платформах для таких областей, как медици-

на, телекоммуникации и образование. Джозеф специализируется на создании за-

казных компонентов и написал прикладные платформы для трех компаний.

Бен Албахари (Ben Albahari) ранее работал менеджером программных проектов

в Microsoft, где он, в частности, занимался созданием .NET Compact Framework и

ADO.NET. Затем он стал соучредителем компании Genamics, поставляющей инст-

рументальные средства для программистов, работающих на C# и J++, а также про-

граммные продукты для анализа ДНК и белковых последовательностей. Он был

соавтором предыдущих изданий этой книги, а также "C# Essentials" ("Основы C#"),

первой книги издательства O'Reilly, посвященной этому языку.

Page 29: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

2 Ãëàâà 9

Page 30: C# 3.0. Справочникstatic1.ozone.ru/multimedia/book_file/1005919225.pdf · ISBN 978-5-9775-0245-0 ... C# 3.0, реализованном в Microsoft Visual Studio 2008

Ïðåäèñëîâèå

Каждый выпуск C# и .NET Framework содержит новые функциональные возможно-сти и имеет больший потенциал для повышения производительности. Версия C# 3.0 содержит самые значительные изменения в языке за все время его развития, в том числе унифицированный синтаксис запросов, называемый LINQ (Language Integrated Query, запрос, интегрированный в язык). Он наводит мост между про-граммами и их источниками данных, традиционно отделяемым друг от друга. Он также приближает C# к функциональным языкам, таким как LISP и Haskell.

Платой за рост функциональности является необходимость изучить больший объем материала. Хотя такие инструменты, как IntelliSense от Microsoft (а также много-численные справочные материалы), отлично помогают справиться с этой задачей, все они предполагают наличие у читателя карты концептуального знания. Наша книга как раз и предлагает подобную карту в сжатом и унифицированном стиле, без излишней информации и длинных предисловий.

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

В книге описываются язык C#, среда CLR и сборки ядра Framework. Мы решили сосредоточиться на этих темах, чтобы уделить больше внимания таким трудным вопросам, как нити выполнения, безопасность и домены приложений. Мы специ-ально отмечаем функциональные возможности, впервые появившиеся в C# 3.0, и соответствующие нововведения во Framework, так что нашу книгу можно исполь-зовать и как справочник по C# 2.0.

Öåëåâàÿ àóäèòîðèÿ

Книга рассчитана на аудиторию с уровнем подготовки от среднего до высокого. Предварительное знакомство с языком C# не требуется, но определенный опыт программирования необходим. Для новичка книга может послужить дополнением к учебнику программирования (но не заменит его).

Даже если вы знаете C# 2.0, вы найдете для себя полезную информацию на более чем ста страницах, посвященных LINQ и другим нововведениям в C# 3.0. Кроме