Оглавление....-1
Об авторе....26
О рецензентах....28
Предисловие....29
Структура издания....29
Часть I. C# 7.1....30
Часть II. .NET Core 2.0 и .NET Standard 2.0....30
Часть III. Модели приложений....31
Необходимое программное обеспечение....32
Для кого эта книга....32
Условные обозначения....33
Загрузка примеров кода....34
Цветные изображения из книги....34
Глава 1. Привет C#! Здравствуй .NET Core!....35
Настройка среды разработки....36
Альтернативные среды разработки C#....37
Кросс-платформенное развертывание....38
Установка Microsoft Visual Studio 2017....38
Установка Microsoft Visual Studio Code....42
Установка Microsoft Visual Studio для Mac....45
Знакомство с .NET....48
Обзор .NET Framework....48
Проекты Mono и Xamarin....48
Обзор .NET Core....48
Обзор .NET Standard....50
Обзор .NET Native....52
Сравнение технологий .NET....52
Написание и компиляция кода с помощью интерфейса командной строки .NET Core....52
Кодирование в простом текстовом редакторе....53
Создание и компиляция приложений с помощью интерфейса командной строки .NET Core....55
Решение проблем компиляции....57
Знакомство с промежуточным языком....57
Написание и компиляция кода с применением Microsoft Visual Studio 2017....58
Кодирование в Microsoft Visual Studio 2017....58
Компиляция кода в Visual Studio 2017....62
Работа над ошибками....63
Добавление ранее созданных проектов в Visual Studio 2017....64
Автоматическое форматирование кода....65
Интерактивный C#....65
Другие полезные окна....67
Написание и компиляция кода с использованием Microsoft Visual Studio Code....68
Кодирование в Visual Studio Code....68
Компиляция кода в Visual Studio Code....70
Автоматическое форматирование кода....70
Написание и компиляция кода с помощью Microsoft Visual Studio для Mac....71
Управление исходным кодом с применением GitHub....73
Использование системы Git в Visual Studio 2017....73
Использование системы Git в Visual Studio Code....75
Практические задания....77
Проверочные вопросы....77
Упражнение 1.1....77
Дополнительные ресурсы....77
Резюме....78
Часть I. C# 7.1....79
Глава 2. Говорим на языке C#....81
Основы языка C#....81
Visual Studio 2017....82
Visual Studio Code в среде macOS Linux или Windows....84
Грамматика языка C#....85
Словарь языка C#....87
Помощь в написании корректного кода....88
Глаголы = методы....90
Существительные = типы данных поля и переменные....91
Подсчет количества типов и методов....91
Объявление переменных....93
Присвоение имен переменным....94
Литеральные значения....94
Хранение текста....95
Хранение чисел....95
Хранение логических значений....100
Тип object....100
Тип dynamic....101
Локальные переменные....101
Создаем тип допускающий значение null....102
Обзор ссылочных типов допускающих значение null....103
Хранение группы значений в массиве....105
Анализ консольных приложений....106
Отображение вывода пользователю....106
Получение пользовательского ввода....107
Импорт пространства имен....107
Упрощение работы с командной строкой....108
Чтение аргументов и работа с массивами....109
Работа с переменными....113
Экспериментируем с унарными операторами....113
Экспериментируем с арифметическими операторами....114
Логические операторы и операторы сравнения....115
Практические задания....115
Проверочные вопросы....115
Упражнение 2.1. Числовые размеры и диапазоны....116
Дополнительные ресурсы....116
Резюме....117
Глава 3. Управление потоком выполнения и преобразование типов....118
Инструкции выбора....118
Visual Studio 2017....118
Visual Studio Code в среде macOS Linux или Windows....119
Инструкция if....119
Инструкция switch....121
Инструкции перебора....123
Инструкция while....124
Инструкция do....124
Инструкция for....125
Инструкция foreach....125
Приведение и преобразование типов....126
Приведение от числа к числу....126
Использование типа System.Convert....128
Округление чисел....128
Преобразование любого типа в строку....129
Конвертация бинарного объекта в строку....130
Разбор строк для преобразования в числа или значения даты и времени....131
Обработка исключений при преобразовании типов....132
Инструкция try....132
Перехват всех исключений....133
Перехват определенных исключений....133
Проверка переполнения....135
Инструкция checked....135
Инструкция unchecked....136
Поиск документации....137
Сайты Microsoft Docs и MSDN....137
Переход к определению....138
Сайт StackOverflow....138
Поисковая система Google....140
Подписка на блоги....142
Паттерны проектирования....142
Практические задания....142
Проверочные вопросы....142
Упражнение 3.1. Циклы и переполнение....143
Упражнение 3.2. Циклы и операторы....143
Упражнение 3.3. Обработка исключений....144
Дополнительные ресурсы....144
Резюме....145
Глава 4. Создание отладка и тестирование функций....146
Написание функций....146
Написание функции таблицы умножения....147
Написание функции возвращающей значение....148
Написание математических функций....150
Отладка приложений в процессе разработки....154
Создание приложения с умышленной ошибкой....154
Установка точек останова....155
Панель Debugging....156
Дополнительные панели отладки....157
Пошаговое выполнение кода....158
Настройка точек останова....160
Ведение журнала во время разработки и выполнения....161
Реализация прослушивателей Debug и Trace....162
Переключение уровней трассировки....165
Функции модульного тестирования....167
Создание библиотеки классов для тестирования в Visual Studio 2017....167
Создание проекта модульного тестирования в Visual Studio 2017....168
Создание библиотеки классов для тестирования в Visual Studio Code....170
Разработка модульных тестов....171
Выполнение модульных тестов в Visual Studio 2017....172
Выполнение модульных тестов в Visual Studio Code....173
Практические задания....175
Проверочные вопросы....175
Упражнение 4.1. Отладка и модульное тестирование....175
Дополнительные ресурсы....176
Резюме....176
Глава 5. Создание пользовательских типов с помощью объектно-ориентированного программирования....177
Вкратце об объектно-ориентированном программировании....177
Сборка библиотек классов....178
Создание библиотек классов в Visual Studio 2017....178
Создание библиотек классов в Visual Studio Code....179
Определение классов....180
Создание экземпляров классов....181
Управление проектами в Visual Studio Code....184
Наследование System.Object....185
Хранение данных в полях....186
Определение полей....186
Хранение значения с помощью ключевого слова enum....188
Хранение группы значений с помощью коллекций....191
Создание статического поля....192
Создание константного поля....193
Создание поля только для чтения....194
Инициализация полей с помощью конструкторов....194
Настройка полей через символьные константы default....195
Запись и вызов методов....197
Комбинация нескольких значений с помощью кортежей....197
Определение и передача параметров в методы....200
Перегрузка методов....201
Необязательные параметры и именованные аргументы....202
Управление передачей параметров....203
Разделение классов с помощью ключевого слова partial....205
Управление доступом с помощью свойств и индексаторов....205
Определение свойств только для чтения....206
Определение настраиваемых свойств....207
Определение индексаторов....208
Практические задания....209
Проверочные вопросы....209
Дополнительные ресурсы....209
Резюме....210
Глава 6. Реализация интерфейсов и наследование классов....211
Настройка библиотеки классов и консольного приложения....211
Visual Studio 2017....212
Visual Studio Code....212
Определение классов....214
Упрощение методов с помощью операторов....214
Реализация функционала с применением метода....214
Реализация функционала с помощью оператора....216
Определение локальных функций....217
Вызов и обработка событий....218
Вызов методов с помощью делегатов....218
Определение событий....219
Реализация интерфейсов....221
Универсальные интерфейсы....221
Сравнение объектов при сортировке....222
Многократное использование типов с помощью универсальных шаблонов....225
Создание универсальных типов....226
Создание универсального метода....228
Управление памятью с применением ссылочных типов и типов значений....229
Определение структур....229
Освобождение неуправляемых ресурсов....230
Обеспечение вызова метода Dispose....232
Наследование классов....233
Расширение классов....233
Скрытие членов класса....234
Переопределение членов....235
Предотвращение наследования и переопределения....236
Полиморфизм....236
Приведение в иерархиях наследования....238
Неявное приведение....238
Явное приведение....238
Обработка исключений приведения....238
Наследование и расширение типов .NET....239
Наследование исключений....239
Расширение типов при невозможности наследования....241
Практические задания....243
Проверочные вопросы....243
Упражнение 6.1. Создание иерархии наследования....243
Дополнительные ресурсы....243
Резюме....244
Часть II. .NET Core 2.0 и .NET Standard 2.0....245
Глава 7. Обзор и упаковка типов .NET Standard....247
Использование сборок и пространств имен....247
Стандартные библиотеки классов и CoreFX....248
Добавление ссылок на зависимые сборки....249
Связанные сборки и пространства имен....250
Связывание ключевых слов C# с типами .NET....255
Совместное кросс-платформенное использование кода с помощью библиотек классов .NET Standard 2.0....256
Создание библиотеки классов .NET Standard 2.0....257
Использование NuGet-пакетов....258
Метапакеты....259
Платформы....260
Исправление зависимостей....263
Публикация приложений....263
Подготовка консольного приложения к публикации....263
Публикация в Visual Studio 2017....264
Публикация в Visual Studio Code....267
Упаковка библиотек для распространения с помощью NuGet....268
Команды dotnet....268
Добавление ссылки на пакет....269
Упаковка библиотеки для распространения с помощью NuGet....271
Тестирование пакетов....275
Портирование кода в .NET Core....276
Можно ли портировать?....277
Нужно ли портировать?....277
Анализатор портируемости .NET....277
Сравнение .NET Framework и .NET Core....278
Использование библиотек не относящихся к .NET Standard....278
Практические задания....279
Проверочные вопросы....280
Дополнительные ресурсы....280
Резюме....280
Глава 8. Использование распространенных типов .NET Standard....281
Работа с числами....281
Крупные целые числа....282
Работа с комплексными числами....283
Работа с текстом....283
Извлечение длины строки....284
Извлечение символов строки....284
Разделение строк....284
Извлечение фрагмента строки....284
Проверка содержимого строк....285
Другие члены класса string....285
Эффективное оперирование строками....286
Сопоставление шаблонов с регулярными выражениями....287
Работа с коллекциями....289
Общие характеристики всех коллекций....290
Понятие коллекции....291
Работа со списками....293
Работа со словарями....294
Сортировка коллекций....295
Использование специализированных коллекций....295
Использование неизменяемых коллекций....296
Работа с сетевыми ресурсами....296
Работа с идентификаторами URI DNS и IP-адресами....297
Опрос сервера....298
Работа с типами и атрибутами....299
Указание версий сборок....299
Чтение метаданных о сборке....300
Создание собственных атрибутов....301
Другие возможности Reflection....303
Глобализация кода....303
Практические задания....305
Проверочные вопросы....305
Упражнение 8.1. Регулярные выражения....306
Упражнение 8.2. Методы расширения....306
Дополнительные ресурсы....306
Резюме....307
Глава 9. Работа с файлами потоками и сериализация....308
Управление файловой системой....308
Работа в кросс-платформенных средах и файловых системах....308
Работа с дисками....311
Работа с каталогами....312
Управление файлами....314
Управление путями....316
Извлечение информации о файле....316
Управление файлами....317
Чтение и запись с помощью потоков....318
Запись в текстовые и XML-потоки....322
Освобождение файловых ресурсов....324
Сжатие потоков....326
Кодирование текста....328
Преобразование строк в последовательности байтов....328
Кодирование/декодирование текста в файлах....331
Сериализация графов объектов....331
XML-сериализация....331
XML-десериализация....334
Контроль результата XML-сериализации....335
JSON-сериализация....335
Сериализация в другие форматы....336
Практические задания....337
Проверочные вопросы....337
Упражнение 9.1. XML-сериализация....337
Дополнительные ресурсы....338
Резюме....338
Глава 10. Защита данных и приложений....339
Терминология безопасности....339
Ключи и их размеры....340
Векторы инициализации (IV) и размеры блоков....340
Соли....341
Генерация ключей и векторов инициализации....341
Шифрование и дешифрование данных....342
Симметричное шифрование с помощью алгоритма AES....344
Хеширование данных....348
Подписывание данных....352
Подписывание с помощью алгоритмов SHA256 и RSA....352
Проверка подписи и валидация....354
Генерация случайных чисел....355
Генерация случайных чисел для игр....356
Генерация случайных чисел для криптографии....356
Тестирование генерации случайного числа или проверки подлинности....357
Аутентификация и авторизация пользователей....358
Реализация аутентификации и авторизации....359
Тестирование аутентификации и авторизации....360
Защита функций приложения....362
Практические задания....363
Проверочные вопросы....363
Упражнение 10.1. Защита данных с помощью шифрования и хеширования....363
Упражнение 10.2. Дешифрование данных....364
Дополнительные ресурсы....364
Резюме....364
Глава 11. Работа с базами данных с помощью Entity Framework Core....365
Современные базы данных....365
Использование образца реляционной базы данных....366
Microsoft SQL Server....366
SQLite....371
Настройка Entity Framework Core....375
Выбор поставщика данных .NET....375
Подключение к базе данных....376
Определение моделей Entity Framework Core....378
Соглашения EF Core....378
Атрибуты аннотации EF Core....379
EF Core Fluent API....379
Создание модели EF Core....380
Запрос данных из модели EF Core....384
Логирование EF Core....386
Соотнесение шаблонов с помощью Like....390
Определение глобальных фильтров....391
Схемы загрузки данных в EF Core....392
Управление данными с помощью EF Core....395
Добавление элементов....395
Обновление элементов....396
Удаление элементов....397
Группировка контекстов базы данных....398
Транзакции....398
Определение явной транзакции....399
Практические задания....400
Проверочные вопросы....400
Упражнение 11.1. Практика экспорта данных с помощью различных форматов сериализации....401
Упражнение 11.2. Изучение документации EF Core....401
Резюме....401
Глава 12. Создание запросов и управление данными с помощью LINQ....402
Написание запросов LINQ....402
Расширение последовательностей с помощью перечислимого класса....403
Фильтрация элементов с помощью метода Where....403
Сортировка элементов....408
Фильтрация по типу....409
Работа с множествами....411
Применение LINQ на платформе EF Core....413
Проекция элементов с помощью ключевого слова select....413
Создание модели EF Core....413
Присоединение и группировка....416
Агрегирование последовательностей....419
Подслащение синтаксиса с помощью синтаксического сахара....419
Использование нескольких потоков с помощью PLINQ....420
Создание собственных методов расширения LINQ....424
Работа с LINQ to XML....427
Генерация XML с помощью LINQ to XML....427
Чтение XML с применением LINQ to XML....428
Практические задания....429
Проверочные вопросы....429
Упражнение 12.1. Создание запросов LINQ....429
Дополнительные ресурсы....430
Резюме....430
Глава 13. Улучшение производительности и масштабируемости с помощью многозадачности....431
Мониторинг производительности и использования ресурсов....431
Оценка эффективности типов....431
Мониторинг производительности и использования памяти....432
Процессы потоки и задачи....437
Асинхронное выполнение задач....439
Синхронное выполнение нескольких действий....439
Асинхронное выполнение нескольких действий с помощью задач....441
Ожидание выполнения задач....443
Задачи продолжения....444
Вложенные и дочерние задачи....445
Синхронизация доступа к общим ресурсам....446
Доступ к ресурсу из нескольких потоков....447
Применение к ресурсу взаимоисключающей блокировки....449
Инструкция lock....449
Выполнение атомарных операций....451
Использование других типов синхронизации....451
Методы async и await....452
Увеличение скорости отклика консольных приложений....452
Увеличение скорости отклика приложений с GUI....454
Улучшение масштабируемости веб-приложений и веб-сервисов....454
Часто используемые типы поддерживающие многозадачность....454
Ключевое слово await в блоках catch....455
Практические задания....455
Проверочные вопросы....455
Дополнительные ресурсы....456
Резюме....456
Часть III. Модели приложений....457
Глава 14. Создание сайтов с помощью ASP.NET Core Razor Pages....461
Веб-разработка....461
Протокол передачи гипертекста....461
Клиентская веб-разработка....464
ASP.NET Core....466
Классический ASP.NET и современный ASP.NET Core....467
Создание проекта ASP.NET Core в Visual Studio 2017....467
Создание проекта ASP.NET Core в Visual Studio Code....468
Обзор шаблона пустого проекта ASP.NET Core Empty....468
Тестирование пустого веб-сайта....470
Включение статических файлов....472
Включение файлов по умолчанию....474
Технология Razor Pages....475
Включение страниц Razor....475
Определение страницы Razor....475
Использование общих макетов с Razor Pages....476
Использование отдельных файлов кода программной части с технологией Razor Pages....479
Использование Entity Framework Core совместно с ASP.NET Core....481
Создание сущностных моделей для базы данных Northwind....481
Создание базы данных Northwind на сайте....489
Настройка Entity Framework Core в качестве сервиса....490
Работа с данными....492
Практические задания....494
Упражнение 14.1. Создание сайта ориентированного на данные....494
Дополнительные ресурсы....494
Резюме....495
Глава 15. Разработка сайтов с помощью ASP.NET Core MVC....496
Создание и настройка сайта ASP.NET Core MVC....496
Создание сайта ASP.NET Core MVC....497
Структура проекта веб-приложения ASP.NET Core MVC....500
Миграция баз данных....502
Тестирование сайта ASP.NET MVC....504
Проверка подлинности с помощью системы ASP.NET Identity....505
Структура сайта ASP.NET Core MVC....507
Запуск ASP.NET Core....507
Маршрутизация по умолчанию....509
Контроллеры ASP.NET Core MVC....509
Модели ASP.NET Core MVC....510
Представления ASP.NET Core MVC....512
Передача параметров с помощью значения маршрута....519
Передача параметров с помощью строки запроса....521
Практические задания....524
Упражнение 15.1. Практика улучшения масштабируемости за счет понимания и реализации асинхронных методов....524
Дополнительные ресурсы....524
Резюме....524
Глава 16. Создание веб-сервисов и приложений с помощью ASP.NET Core....525
Создание сервисов с помощью веб-API ASP.NET Core и Visual Studio Code....525
Обзор контроллеров ASP.NET Core....526
Создание проекта веб-API ASP.NET Core....526
Создание веб-сервиса для базы данных Northwind....530
Создание репозиториев данных для сущностей....531
Документирование и тестирование сервисов с применением Swagger....537
Тестирование запросов GET в любом браузере....537
Тестирование запросов POST PUT и DELETE с помощью Swagger....538
Установка пакета Swagger....538
Тестирование запросов GET с помощью Swagger UI....540
Тестирование запросов POST с помощью Swagger UI....542
Создание SPA с помощью Angular....545
Шаблон проекта Angular....545
Вызов NorthwindService....549
Тестирование вызова сервиса компонентом Angular....552
Использование других шаблонов проектов....554
Практические задания....555
Упражнение 16.1. React и Redux....555
Дополнительные ресурсы....556
Резюме....556
Глава 17. Разработка Windows-приложений с помощью языка XAML и системы проектирования Fluent....557
Общие сведения о современной платформе Windows....558
Общие сведения об универсальной платформе Windows....558
Обзор системы проектирования Fluent....559
Набор стандартов XAML Standard 1.0....560
Разработка современных Windows-приложений....561
Активизация режима разработчика....562
Создание проекта UWP-приложения....562
Обзор основных элементов управления и акрилового материала....567
Обзор эффекта отображения....568
Установка дополнительных элементов управления....571
Использование ресурсов и шаблонов....572
Общий доступ к ресурсам....573
Замена шаблона элемента управления....574
Привязка данных....576
Привязка к элементам....576
Привязка к источникам данных....577
Создание приложений с помощью Windows Template Studio....588
Установка Windows Template Studio....588
Выбор типов проектов сред страниц и функциональности....588
Ретаргетинг проекта....591
Настройка нескольких видов....591
Тестирование функциональности приложения....592
Практические задания....594
Дополнительные ресурсы....594
Резюме....594
Глава 18. Разработка мобильных приложений с помощью XAML и Xamarin.Forms....595
Знакомство с Xamarin и Xamarin.Forms....595
Xamarin.Forms в качестве расширения Xamarin....596
Говорим «мобильность» подразумеваем «облака»....596
Разработка мобильных приложений с помощью Xamarin.Forms....597
Установка Android SDK....598
Создание решения Xamarin.Forms....598
Создание модели....601
Создание интерфейса для набора телефонных номеров....605
Создание представлений для списка клиентов и подробной информации о клиенте....607
Тестирование мобильного приложения в среде iOS....612
Добавление NuGet-пакетов для вызова REST-сервиса....616
Получение данных о клиентах с помощью сервиса....618
Практические задания....619
Дополнительные ресурсы....619
Резюме....619
Заключение....620
Приложение. Ответы на проверочные вопросы....621
Глава 1. Привет C#! Здравствуй .NET Core!....621
Глава 2. Говорим на языке C#....622
Глава 3. Управление потоком выполнения и преобразование типов....623
Глава 4. Создание отладка и тестирование функций....625
Глава 5. Создание пользовательских типов с помощью объектно-ориентированного программирования....626
Глава 6. Реализация интерфейсов и наследование классов....627
Глава 7. Обзор и упаковка типов .NET Standard....628
Глава 8. Использование распространенных типов .NET Standard....629
Глава 9. Работа с файлами потоками и сериализация....631
Глава 10. Защита данных и приложений....632
Глава 11. Работа с базами данных с помощью Entity Framework Core....633
Глава 12. Создание запросов и управление данными с помощью LINQ....634
Глава 13. Улучшение производительности и масштабируемости с помощью многозадачности....635
C# 7 – новая мощная и многофункциональная версия популярнейшего языка программирования от Майкрософт. Вы встретите немало интересных книг по языку C# и платформе .NET, однако, в большинстве из них лишь мельком рассматривается столь важный аспект, как кросс-платформенная разработка.
Научитесь писать приложения, которые работают всегда и везде, на ПК и мобильных устройствах. Познакомьтесь с инструментом Xamarin.Forms, освойте тонкости работы с Visual Studio 2017, добейтесь многогранности и универсальности ваших программ на C#.