Книга посвящена программированию на языке C# для платформы Microsoft .NET, начиная с основ языка и разработки программ для работы в режиме командной строки и заканчивая созданием современных веб-приложений. Материал сопровождается большим количеством практических примеров. Подробно описывается логика выполнения каждого участка программы. Уделено внимание вопросам повторного использования кода. В 6-м издании примеры переписаны с учетом современной платформы .NET 7, большой упор сделан на веб–приложения и фреймворк доступа к данным Entity Framework. На сайте издательства находятся коды программ, дополнительная справочная информация и копия базы данных для выполнения примеров из книги.
Для программистов
Программирование может быть доступно каждому!
Книга будет полезна всем, кто хочет научиться писать программы для платформы Microsoft .NET на современном и удобном языке программирования C#. Большое количество практических примеров, легкость изложения материала и интересные комментарии призваны сделать обучение занимательным и нескучным, а подробное описание логики выполнения каждого участка кода поможет читателю использовать полученные знания при разработке собственных приложений.
Дополнительным источником знаний в процессе дальнейшего обучения служит электронный архив к книге, содержащий коды программ, дополнительную справочную информацию и копию базы данных для выполнения примеров из книги.
- Программирование для .NET на C#
- Платформа .NET
- Базы данных
- Веб-программирование
- Сетевое программирование
- Повторное использование кода
- Изучение языка на полезных примерах
…Невозможно научить программировать с помощью одной книги, но я попытаюсь заинтересовать вас этим великолепным миром. На сайте издательства выложено множество дополнительных материалов, которые пригодятся вам в самостоятельном изучении. Книга дает основную и необходимую информацию, чтобы вы сразу после ее прочтения смогли приступить к написанию своих собственных приложений …
Михаил Фленов
Книгу “Библия C#. 6-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Предисловие…………………………………………………………………………………………….. 9
Благодарности……………………………………………………………………………………….. 13
Бонус……………………………………………………………………………………………………… 15
Структура книги……………………………………………………………………………………. 17
Глава 1. Введение в .NET……………………………………………………………………….. 19
1.1. Платформа .NET………………………………………………………………………………………………………………….. 19
1.1.1. «Кубики» .NET…………………………………………………………………………………………………………… 20
1.1.2. Сборки……………………………………………………………………………………………………………………….. 21
1.2. Обзор среды разработки Visual Studio .NET…………………………………………………………………….. 23
1.2.1. Работа с проектами и решениями……………………………………………………………………………. 23
1.2.2. Работа с файлами……………………………………………………………………………………………………… 31
1.3. Простейший пример .NET-приложения…………………………………………………………………………….. 31
1.3.1. Проект на языке C#…………………………………………………………………………………………………… 31
1.3.2. Компиляция и запуск проекта на языке C#…………………………………………………………….. 32
1.4. Компиляция приложений……………………………………………………………………………………………………. 34
1.4.1. Компиляция в .NET Framework………………………………………………………………………………… 34
1.4.2. Компиляция в .NET Core или .NET 5 и старше……………………………………………………….. 35
1.5. Поставка сборок………………………………………………………………………………………………………………….. 37
1.6. Формат исполняемого файла .NET……………………………………………………………………………………. 40
1.7. Код верхнего уровня…………………………………………………………………………………………………………… 41
Глава 2. Основы C#……………………………………………………………………………….. 42
2.1. Комментарии……………………………………………………………………………………………………………………….. 42
2.2. Переменная………………………………………………………………………………………………………………………….. 43
2.3. Именование элементов кода………………………………………………………………………………………………. 46
2.4. Работа с переменными……………………………………………………………………………………………………….. 49
2.4.1. Строки и символы…………………………………………………………………………………………………….. 52
2.4.2. Массивы…………………………………………………………………………………………………………………….. 55
2.4.3. Перечисления……………………………………………………………………………………………………………. 58
2.5. Простейшая математика…………………………………………………………………………………………………….. 61
2.6. Условные операторы………………………………………………………………………………………………………….. 66
2.6.1. Условный оператор if………………………………………………………………………………………………. 66
2.6.2. Условный оператор switch………………………………………………………………………………………. 69
2.6.3. Сокращенная проверка……………………………………………………………………………………………. 70
2.7. Циклы…………………………………………………………………………………………………………………………………… 71
2.7.1. Цикл for……………………………………………………………………………………………………………………… 71
2.7.2. Цикл while………………………………………………………………………………………………………………….. 74
2.7.3. Цикл do…while…………………………………………………………………………………………………………… 75
2.7.4. Цикл foreach………………………………………………………………………………………………………………. 76
2.8. Управление циклом…………………………………………………………………………………………………………….. 77
2.8.1. Оператор break…………………………………………………………………………………………………………. 77
2.8.2. Оператор continue…………………………………………………………………………………………………….. 78
2.9. Константы……………………………………………………………………………………………………………………………. 79
2.10. Нулевые значения…………………………………………………………………………………………………………….. 80
2.11. Начальные значения переменных…………………………………………………………………………………… 80
2.12. Системы счисления…………………………………………………………………………………………………………… 81
2.13. Логические операции……………………………………………………………………………………………………….. 84
Глава 3. Объектно-ориентированное программирование………………………. 86
3.1. Объекты на C#…………………………………………………………………………………………………………………….. 86
3.2. Свойства………………………………………………………………………………………………………………………………. 90
3.3. Методы………………………………………………………………………………………………………………………………… 96
3.3.1. Описание методов…………………………………………………………………………………………………….. 97
3.3.2. Параметры методов………………………………………………………………………………………………….. 99
3.3.3. Перегрузка методов………………………………………………………………………………………………… 107
3.3.4. Конструктор……………………………………………………………………………………………………………. 107
3.3.5. Статичность……………………………………………………………………………………………………………. 112
3.3.6. Рекурсия…………………………………………………………………………………………………………………… 115
3.3.7. Деструктор………………………………………………………………………………………………………………. 118
3.3.8. Упрощенный синтаксис…………………………………………………………………………………………. 119
3.4. Метод Main()……………………………………………………………………………………………………………………… 120
3.5. Оператор Using…………………………………………………………………………………………………………………. 122
3.6. Объекты только для чтения……………………………………………………………………………………………… 123
3.7. Объектно-ориентированное программирование……………………………………………………………. 124
3.7.1. Наследование…………………………………………………………………………………………………………. 124
3.7.2. Инкапсуляция………………………………………………………………………………………………………….. 128
3.7.3. Полиморфизм………………………………………………………………………………………………………….. 131
3.8. Наследование от класса Object……………………………………………………………………………………….. 133
3.9. Переопределение методов……………………………………………………………………………………………….. 134
3.10. Обращение к предку из класса………………………………………………………………………………………. 138
3.11. Вложенные классы…………………………………………………………………………………………………………. 140
3.12. Область видимости…………………………………………………………………………………………………………. 142
3.13. Ссылочные и простые типы данных…………………………………………………………………………….. 144
3.14. Проверка класса объекта……………………………………………………………………………………………….. 145
3.15. Неявный тип данных var………………………………………………………………………………………………… 146
3.16. Абстрактные классы………………………………………………………………………………………………………. 147
3.17. Инициализация свойств………………………………………………………………………………………………….. 150
3.18. Частицы класса……………………………………………………………………………………………………………….. 151
Глава 4. Консольные приложения………………………………………………………… 152
4.1. Украшение консоли………………………………………………………………………………………………………….. 153
4.2. Работа с буфером консоли……………………………………………………………………………………………….. 155
4.3. Окно консоли…………………………………………………………………………………………………………………….. 157
4.4. Запись в консоль……………………………………………………………………………………………………………….. 157
4.5. Чтение данных из консоли……………………………………………………………………………………………….. 160
Глава 5. Продвинутое программирование……………………………………………. 162
5.1. Приведение и преобразование типов………………………………………………………………………………. 162
5.2. Все в .NET — это объекты………………………………………………………………………………………………… 164
5.3. Работа с перечислениями Enum………………………………………………………………………………………. 166
5.3.1. Перечисления — это значения………………………………………………………………………………. 166
5.3.2. Перечисления-флаги………………………………………………………………………………………………. 169
5.4. Структуры…………………………………………………………………………………………………………………………. 172
5.5. Дата и время………………………………………………………………………………………………………………………. 177
5.6. Класс строк……………………………………………………………………………………………………………………….. 180
5.7. Перегрузка операторов…………………………………………………………………………………………………….. 183
5.7.1. Математические операторы………………………………………………………………………………….. 184
5.7.2. Операторы сравнения…………………………………………………………………………………………….. 186
5.7.3. Операторы преобразования………………………………………………………………………………….. 187
5.8. Шаблоны……………………………………………………………………………………………………………………………. 189
5.9. Анонимные типы……………………………………………………………………………………………………………….. 192
5.10. Кортежи…………………………………………………………………………………………………………………………… 194
5.11. Форматирование строк…………………………………………………………………………………………………… 195
5.12. Динамика…………………………………………………………………………………………………………………………. 196
Глава 6. Интерфейсы……………………………………………………………………………. 198
6.1. Объявление интерфейсов………………………………………………………………………………………………….. 199
6.2. Реализация интерфейсов………………………………………………………………………………………………….. 201
6.3. Использование реализации интерфейса…………………………………………………………………………. 202
6.4. Интерфейсы в качестве параметров………………………………………………………………………………… 205
6.5. Перегрузка интерфейсных методов…………………………………………………………………………………. 206
6.6. Наследование……………………………………………………………………………………………………………………. 208
6.7. Клонирование объектов…………………………………………………………………………………………………… 209
6.8. Реализация по умолчанию……………………………………………………………………………………………….. 210
Глава 7. Массивы, списки, коллекции и словари…………………………………. 213
7.1. Базовый класс для массивов……………………………………………………………………………………………. 213
7.2. Невыровненные массивы…………………………………………………………………………………………………. 215
7.3. Динамические массивы…………………………………………………………………………………………………….. 217
7.4. Индексаторы массива………………………………………………………………………………………………………. 220
7.5. Интерфейсы массивов………………………………………………………………………………………………………. 221
7.5.1. Интерфейс IEnumerable………………………………………………………………………………………….. 222
7.5.2. Интерфейсы IComparer и IComparable…………………………………………………………………. 225
7.6. Оператор yield…………………………………………………………………………………………………………………… 228
7.7. Стандартные списки…………………………………………………………………………………………………………. 229
7.7.1. Класс Queue…………………………………………………………………………………………………………….. 229
7.7.2. Класс Stack……………………………………………………………………………………………………………… 230
7.7.3. Класс Hashtable………………………………………………………………………………………………………. 231
7.8. Типизированные массивы………………………………………………………………………………………………… 233
7.9. Словарь……………………………………………………………………………………………………………………………… 236
Глава 8. Обработка исключительных ситуаций…………………………………… 238
8.1. Исключительные ситуации………………………………………………………………………………………………. 239
8.2. Исключения в C#……………………………………………………………………………………………………………….. 241
8.3. Оформление блоков try…………………………………………………………………………………………………….. 244
8.4. Ошибки в визуальных приложениях……………………………………………………………………………….. 245
8.5. Генерирование исключительных ситуаций……………………………………………………………………. 247
8.6. Иерархия классов исключений………………………………………………………………………………………… 248
8.7. Собственный класс исключения……………………………………………………………………………………… 249
8.8. Блок finally………………………………………………………………………………………………………………………… 252
8.9. Переполнение……………………………………………………………………………………………………………………. 253
8.10. Замечание о производительности…………………………………………………………………………………. 256
Глава 9. События…………………………………………………………………………………. 257
9.1. Делегаты……………………………………………………………………………………………………………………………. 257
9.2. События и их вызов…………………………………………………………………………………………………………… 258
9.3. Использование собственных делегатов………………………………………………………………………….. 261
9.4. Делегаты изнутри……………………………………………………………………………………………………………… 265
9.5. Анонимные методы…………………………………………………………………………………………………………… 267
Глава 10. LINQ…………………………………………………………………………………….. 268
10.1. LINQ при работе с массивами……………………………………………………………………………………….. 268
10.1.1. SQL-стиль использования LINQ………………………………………………………………………… 268
10.1.2. Использование LINQ через методы………………………………………………………………….. 271
10.2. Магия IEnumerable………………………………………………………………………………………………………….. 271
10.3. Доступ к данным…………………………………………………………………………………………………………….. 275
10.4. Использование LINQ для доступа к XML…………………………………………………………………….. 276
Глава 11. Хранение информации………………………………………………………….. 279
11.1. Файловая система…………………………………………………………………………………………………………… 279
11.2. Текстовые файлы…………………………………………………………………………………………………………….. 282
11.3. Бинарные файлы…………………………………………………………………………………………………………….. 285
11.4. XML-файлы……………………………………………………………………………………………………………………… 289
11.4.1. Создание XML-документов……………………………………………………………………………….. 289
11.4.2. Чтение XML-документов……………………………………………………………………………………. 293
11.5. Потоки Stream………………………………………………………………………………………………………………….. 296
11.6. Потоки MemoryStream…………………………………………………………………………………………………….. 297
11.7. Сериализация………………………………………………………………………………………………………………….. 299
11.7.1. Отключение сериализации………………………………………………………………………………… 302
11.7.2. Сериализация в XML…………………………………………………………………………………………. 304
11.7.3. Особенности сериализации……………………………………………………………………………….. 305
11.7.4. Управление сериализацией……………………………………………………………………………….. 307
Глава 12. Многопоточность………………………………………………………………….. 310
12.1. Класс Thread……………………………………………………………………………………………………………………. 311
12.2. Передача параметра в поток…………………………………………………………………………………………. 314
12.3. Конкурентный доступ…………………………………………………………………………………………………….. 316
12.4. Пул потоков…………………………………………………………………………………………………………………….. 318
12.5. Домены приложений .NET……………………………………………………………………………………………… 320
12.6. Ключевые слова async и await………………………………………………………………………………………. 323
12.7. Задачи или потоки — что выбрать?……………………………………………………………………………… 330
Глава 13. Добро пожаловать в веб-программирование…………………………. 332
13.1. Создание первого веб-приложения……………………………………………………………………………….. 332
13.2. Работа с конфигурацией сайта……………………………………………………………………………………… 339
13.3. Работа со статичными файлами……………………………………………………………………………………. 342
13.4. Модель – Представление – Контроллер………………………………………………………………………. 343
13.5. Маршрутизация………………………………………………………………………………………………………………. 345
13.6. Подробнее про контроллеры…………………………………………………………………………………………. 352
13.7. Представления………………………………………………………………………………………………………………… 355
13.8. Модель представления…………………………………………………………………………………………………… 359
13.9. Представления Razor……………………………………………………………………………………………………… 362
13.9.1. Комментарии………………………………………………………………………………………………………. 362
13.9.2. Вывод данных в представлениях……………………………………………………………………… 363
13.9.3. C#-код………………………………………………………………………………………………………………….. 364
13.9.4. Условные операторы…………………………………………………………………………………………. 365
13.9.5. Циклы…………………………………………………………………………………………………………………… 367
13.9.6. Исключительные ситуации……………………………………………………………………………….. 370
13.9.7. Ключевое слово using………………………………………………………………………………………… 370
13.10. Создание представлений……………………………………………………………………………………………… 372
13.10.1. Макеты………………………………………………………………………………………………………………. 372
13.10.2. Стартовый файл……………………………………………………………………………………………….. 376
13.10.3. Встраиваемые представления…………………………………………………………………………. 378
13.10.4. Компоненты………………………………………………………………………………………………………. 382
13.10.5. Секции……………………………………………………………………………………………………………….. 385
13.11. Работа с формами…………………………………………………………………………………………………………. 386
13.12. Проверка данных………………………………………………………………………………………………………….. 391
13.13. Работа с сессиями…………………………………………………………………………………………………………. 395
13.14. Cookie…………………………………………………………………………………………………………………………….. 397
13.15. Доступ к запросу…………………………………………………………………………………………………………… 399
Глава 14. Базы данных………………………………………………………………………… 401
14.1. Библиотека ADO.NET…………………………………………………………………………………………………….. 401
14.2. Строка подключения………………………………………………………………………………………………………. 403
14.3. Подключение к базе данных………………………………………………………………………………………….. 405
14.4. Инъекция зависимостей на примере подключений……………………………………………………… 408
14.5. Пул соединений………………………………………………………………………………………………………………. 412
14.6. Чтение данных из БД………………………………………………………………………………………………………. 413
14.7. Запросы с параметрами…………………………………………………………………………………………………. 417
14.8. Редактирование данных…………………………………………………………………………………………………. 420
14.9. Транзакции………………………………………………………………………………………………………………………. 421
14.10. Библиотека Dapper……………………………………………………………………………………………………….. 422
Глава 15. Entity Framework Core………………………………………………………….. 425
15.1. Создаем EF-приложение………………………………………………………………………………………………… 426
15.2. Код первичен…………………………………………………………………………………………………………………… 427
15.3. Контекст базы данных……………………………………………………………………………………………………. 429
15.4. Доступ к базе данных…………………………………………………………………………………………………….. 431
15.5. Миграции…………………………………………………………………………………………………………………………. 433
15.6. База данных первична……………………………………………………………………………………………………. 439
15.7. LINQ…………………………………………………………………………………………………………………………………. 441
15.8. Связи: один ко многим……………………………………………………………………………………………………. 442
15.9. Работа со связями……………………………………………………………………………………………………………. 444
15.10. Связи: многие ко многим………………………………………………………………………………………………. 446
15.11. Связи: один к одному……………………………………………………………………………………………………. 451
15.12. Журналы……………………………………………………………………………………………………………………….. 453
15.13. Как сохраняются данные?…………………………………………………………………………………………… 456
15.14. Погружение в запросы………………………………………………………………………………………………….. 459
15.15. Асинхронный доступ……………………………………………………………………………………………………. 468
15.16. Поиск по шаблону………………………………………………………………………………………………………… 469
15.17. Удаление данных………………………………………………………………………………………………………….. 470
15.18. Отслеживание изменений…………………………………………………………………………………………….. 471
15.19. Погружение в связи……………………………………………………………………………………………………….. 475
Глава 16. Повторное использование кода…………………………………………….. 481
16.1. Библиотеки………………………………………………………………………………………………………………………. 481
16.2. Создание библиотеки……………………………………………………………………………………………………… 482
16.3. Приватные сборки…………………………………………………………………………………………………………… 488
Глава 17. Сетевые сервисы…………………………………………………………………… 490
17.1. История……………………………………………………………………………………………………………………………. 490
17.2. Создаем WebAPI……………………………………………………………………………………………………………… 492
17.3. Теория Web API………………………………………………………………………………………………………………. 496
17.4. Сессии………………………………………………………………………………………………………………………………. 498
17.5. Полный цикл……………………………………………………………………………………………………………………. 500
Заключение………………………………………………………………………………………….. 503
Список литературы………………………………………………………………………………. 505
Приложение. Описание электронного архива, сопровождающего книгу 507
Предметный указатель…………………………………………………………………………. 509
-
Библия C#. 6-е издание
880 ₽
625 ₽
Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.