Предисловие 9
Благодарности 13
Бонус 15
Структура книги 17
Глава 1. Введение в .NET
19
1.1. Платформа .NET 19
1.1.1. Кубики .NET 21
1.1.2. Сборки 22
1.2. Обзор среды разработки Visual Studio .NET 24
1.2.1. Работа с проектами и решениями 24
1.2.2. Панель Server Explorer 27
1.2.3. Панель Toolbox 29
1.2.4. Панель Solution Explorer 31
1.2.5. Панель Class View 34
1.2.6. Работа с файлами 35
1.3. Простейший пример .NET-приложения 35
1.3.1. Проект на языке C# 35
1.3.2. Компиляция и запуск проекта на языке C# 36
1.4. Компиляция приложений 38
1.4.1. Компиляция в .NET Framework 38
1.4.2. Компиляция в .NET Core 40
1.5. Поставка сборок 41
1.6. Формат исполняемого файла .NET 44
Глава 2. Основы C#
47
2.1. Комментарии 47
2.2. Переменная 48
2.3. Именование элементов кода 51
2.4. Работа с переменными 55
2.4.1. Строки и символы 58
2.4.2. Массивы 60
2.4.3. Перечисления 63
2.5. Простейшая математика 66
2.6. Логические операции 71
2.6.1. Условный оператор if 71
2.6.2. Условный оператор switch 74
2.6.3. Сокращенная проверка 75
2.7. Циклы 76
2.7.1. Цикл for 76
2.7.2. Цикл while 78
2.7.3. Цикл do...while 79
2.7.4. Цикл foreach 80
2.8. Управление циклом 82
2.8.1. Оператор break 82
2.8.2. Оператор continue 82
2.9. Константы 84
2.10. Нулевые значения 84
Глава 3. Объектно-ориентированное программирование
87
3.1. Объекты на C# 87
3.2. Свойства 91
3.3. Методы 95
3.3.1. Описание методов 96
3.3.2. Параметры методов 99
3.3.3. Перегрузка методов 105
3.3.4. Конструктор 106
3.3.5. Статичность 110
3.3.6. Рекурсивный вызов методов 113
3.3.7. Деструктор 115
3.4. Метод Main() 117
3.5. Пространства имен 119
3.6. Начальные значения переменных 121
3.7. Объекты только для чтения 121
3.8. Объектно-ориентированное программирование 122
3.8.1. Наследование 122
3.8.2. Инкапсуляция 124
3.8.3. Полиморфизм 125
3.9. Наследование от класса Object 126
3.10. Переопределение методов 127
3.11. Обращение к предку из класса 130
3.12. Вложенные классы 131
3.13. Область видимости 133
3.14. Ссылочные и простые типы данных 135
3.15. Абстрактные классы 136
3.16. Проверка класса объекта 139
3.17. Инициализация свойств 140
3.18. Частицы класса 141
Глава 4. Консольные приложения
143
4.1. Украшение консоли 144
4.2. Работа с буфером консоли 146
4.3. Окно консоли 148
4.4. Запись в консоль 148
4.5. Чтение данных из консоли 151
Глава 5. Визуальный интерфейс
153
5.1. Введение в XAML 153
5.2. Универсальные окна 158
5.3. Раскладки, или макеты 160
5.3.1. Сетка 161
5.3.2. Стек 163
5.3.3. Холст 163
5.4. Объявления или код? 163
5.5. Оформление (декорация) 166
5.5.1. Базовые свойства оформления 166
5.5.2. Вложенные компоненты 168
5.5.3. Стили 169
5.6. События в WPF 171
5.7. Работа с данными компонентов 175
5.7.1. Работа с данными «в лоб» 175
5.7.2. Привязка данных 176
5.8. Элементы управления 182
5.8.1. ListBox 182
5.8.2. ComboBox 188
5.8.3. ProgressBar 188
5.9. Что дальше? 189
Глава 6. Продвинутое программирование
191
6.1. Приведение и преобразование типов 191
6.2. Все в .NET — это объекты 193
6.3. Работа с перечислениями Enum 194
6.4. Структуры 197
6.5. Дата и время 199
6.6. Класс строк 202
6.7. Перегрузка операторов 204
6.7.1. Математические операторы 204
6.7.2. Операторы сравнения 207
6.7.3. Операторы преобразования 208
6.8. Тип var 210
6.9. Шаблоны 211
6.10. Анонимные типы 214
6.11. Кортежи 215
6.12. Форматирование строк 216
Глава 7. Интерфейсы
219
7.1. Объявление интерфейсов 220
7.2. Реализация интерфейсов 221
7.3. Использование реализации интерфейса 223
7.4. Интерфейсы в качестве параметров 226
7.5. Перегрузка интерфейсных методов 227
7.6. Наследование 229
7.7. Клонирование объектов 230
Глава 8. Массивы
233
8.1. Базовый класс для массивов 233
8.2. Невыровненные массивы 235
8.3. Динамические массивы 237
8.4. Индексаторы массива 239
8.5. Интерфейсы массивов 241
8.5.1. Интерфейс IEnumerable 241
8.5.2. Интерфейсы IComparer и IComparable 244
8.6. Оператор yield 247
8.7. Стандартные списки 248
8.7.1. Класс Queue 248
8.7.2. Класс Stack 250
8.7.3. Класс Hashtable 250
8.8. Типизированные массивы 252
Глава 9. Обработка исключительных ситуаций
255
9.1. Исключительные ситуации 255
9.2. Исключения в C# 257
9.3. Оформление блоков try 261
9.4. Ошибки в визуальных приложениях 262
9.5. Генерирование исключительных ситуаций 264
9.6. Иерархия классов исключений 265
9.7. Собственный класс исключения 266
9.8. Блок finally 269
9.9. Переполнение 270
Глава 10. События
273
10.1. Делегаты 273
10.2. События и их вызов 274
10.3. Использование собственных делегатов 277
10.4. Делегаты изнутри 282
10.5. Анонимные методы 283
Глава 11. LINQ
285
11.1. LINQ при работе с массивами 285
11.1.1. SQL-стиль использования LINQ 286
11.1.2. Использование LINQ через методы 288
11.2. Магия IEnumerable 288
11.3. Доступ к данным 292
11.4. LINQ для доступа к XML 293
Глава 12. Небезопасное программирование
295
12.1. Разрешение небезопасного кода 296
12.2. Указатели 297
12.3. Память 300
12.4. Системные функции 302
Глава 13. Графика
305
13.1. Простые фигуры 305
13.2. Растровая графика 309
Глава 14. Хранение информации
311
14.1. Реестр 311
14.2. Файловая система 316
14.3. Текстовые файлы 320
14.4. Бинарные файлы 323
14.5. XML-файлы 327
14.5.1. Создание XML-документов 328
14.5.2. Чтение XML-документов 332
14.6. Потоки Stream 335
14.7. Потоки MemoryStream 337
14.8. Сериализация 338
14.8.1. Отключение сериализации 341
14.8.2. Особенности сериализации 342
14.8.3. Управление сериализацией 344
Глава 15. Многопоточность
347
15.1. Класс Thread 348
15.2. Передача параметра в поток 351
15.3. Потоки с использованием делегатов 352
15.4. Конкурентный доступ 355
15.5. Пул потоков 358
15.6. Домены приложений .NET 360
15.7. Ключевые слова async и await 362
Глава 16. Базы данных
369
16.1. Библиотека ADO.NET 369
16.2. Строка подключения 371
16.3. Подключение к базе данных 376
16.4. Пул соединений 379
16.5. Выполнение команд 380
16.6. Транзакции 382
16.7. Наборы данных 384
16.8. Чтение результата запроса 388
16.9. Работа с процедурами 390
16.10. Методы OleDbCommand 395
16.11. Отсоединенные данные 398
16.12. Адаптер DataAdapter 401
16.12.1. Конструктор 402
16.12.2. Получение результата запроса 402
16.12.3. Сохранение изменений в базе данных 403
16.12.4. Связанные таблицы 405
16.12.5. Добавление данных 406
16.12.6. Удаление данных 408
16.13. Набор данных DataSet 409
16.13.1. Хранение данных в DataSet 409
16.13.2. Класс DataRow 412
16.13.3. Класс DataColumn 414
16.13.4. Класс DataTable 415
16.14. Таблицы в памяти 416
16.15. Выражения 418
16.16. Ограничения 420
16.17. Манипулирование данными 421
16.17.1. Добавление строк 421
16.17.2. Редактирование данных 423
16.17.3. Поиск данных 424
16.17.4. Удаление строк 425
16.18. Связанные данные 425
16.19. Ограничение внешнего ключа 429
16.20. Фильтрация данных 436
16.21. Представление данных DataView 438
16.22. Схема данных 442
Глава 17. Повторное использование кода
445
17.1. Библиотеки 445
17.2. Создание библиотеки 446
17.3. Приватные сборки 450
17.4. Общие сборки 452
17.5. Создание пользовательских компонентов 455
17.6. Установка компонентов 461
Глава 18. Удаленное взаимодействие
463
18.1. Удаленное взаимодействие в .NET 463
18.2. Структура распределенного приложения 465
18.3. Общая сборка 466
18.4. Сервер 467
18.5. Клиент 470
Глава 19. Сетевое программирование
473
19.1. HTTP-клиент 473
19.2. Прокси-сервер 476
19.3. Класс Uri 477
19.4. Сокеты 479
19.5. Парсинг документа 489
19.6. Клиент-сервер 494
Заключение 501
Список литературы 503
Приложение. Описание электронного архива, сопровождающего книгу 505
Предметный указатель