Author(s): Джон Пол Мюллер при участии Билла Семпфа и Чака Сефа ; перевод с английского и редакция И. В. Красикова
Series: Для чайников; Ведь это так просто!
Publisher: Диалектика
Year: 2019
Language: Russian
Pages: 596 с.
City: Санкт-Петербург
Оглавление
Содержание
Об авторе
Посвящение
Благодарности
Введение
Об этой книге
Глупые предположения
Пиктограммы, используемые в книге
Источники дополнительной информации
Что дальше
Ждем ваших отзывов!
Часть 1. Основы программирования на C#
Глава 1
Ваше первое консольное приложение на C#
Компьютерные языки, C# и .NET
Что такое программа
Что такое C#
Что такое .NET
Что такое Visual Studio 2017 и Visual C#
Создание первого консольного приложения
Создание исходной программы
Тестовая поездка
Заставим программу работать
Обзор консольного приложения
Каркас программы
Комментарии
Тело программы
Введение в хитрости панели элементов
Сохранение кода на панели элементов
Повторное использование кода из панели элементов
Глава 2
Работа с переменными
Объявление переменной
Что такое int
Правила объявления переменных
Вариации на тему int
Представление дробных чисел
Работа с числами с плавающей точкой
Объявление переменной с плавающей точкой
Ограничения переменных с плавающей точкой
Десятичные числа: комбинация целых чисел и чисел с плавающей точкой
Объявление переменных типа decimal
Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
Логичен ли логический тип
Символьные типы
Тип char
Специальные символы
Тип string
Что такое тип-значение
Сравнение string и char
Вычисление високосных лет: DateTime
Объявление числовых констант
Преобразование типов
Позвольте компилятору C# вывести типы данных
Глава 3
Работа со строками
Неизменяемость строк
Основные операции над строками
Сравнение строк
Проверка равенства: метод Compare ()
Сравнение без учета регистра
Изменение регистра
Отличие строк в разных регистрах
Преобразование символов строки в символы верхнего или нижнего регистра
Цикл по строке
Поиск в строках
Как искать
Пуста ли строка
Получение введенной пользователем информации
Удаление пробельных символов
Анализ числового ввода
Обработка последовательности чисел
Объединение массива строк в одну строку
Управление выводом программы
Использование методов Trim () wPad()
Использование метода ConcatO
Использование метода Split ()
Форматирование строк
StringBuilder: эффективная работа со строками
Глава 4
Операторы
Арифметика
Простейшие операторы
Порядок выполнения операторов
Оператор присваивания
Оператор инкремента
Логично ли логическое сравнение
Сравнение чисел с плавающей точкой
Составные логические операторы
Тип выражения
Вычисление типа операции
Типы при присваивании
Перегрузка операторов
Глава 5
Управление потоком выполнения
Ветвление с использованием if и switch
Инструкция if
Инструкция else
Как избежать else
Вложенные инструкции if
Конструкция switch
Циклы
Цикл while
Цикл do. . .while
Операторы break и continue
Цикл без счетчика
Правила области видимости
Цикл for
Пример
Зачем нужны разные циклы
Вложенные циклы
Оператор goto
Глава 6
Глава для коллекционеров
Массивы C#
Зачем нужны массивы
Массив фиксированного размера
Массив переменного размера
Свойство Length
Инициализация массивов
Цикл foreach
Сортировка массива данных
Использование var для массивов
Коллекции C#
Синтаксис коллекций
Понятие <т>
Обобщенные коллекции
Использование списков
Инстанцирование пустого списка
Создание списка целых чисел
Создание списка для хранения объектов
Преобразования списков в массивы и обратно
Подсчет количества элементов в списке
Поиск в списках
Прочие действия co списками
Использование словарей
Создание словаря
Поиск в словаре
Итерирование словаря
Инициализаторы массивов и коллекций
Инициализация массивов
Инициализация коллекций
Использование множеств
Выполнение специфичных для множеств задач
Создание множества
Добавление элемента в множество
Выполнение объединения
Пересечение множеств
Получение разности
Не используйте старые коллекции
Глава 7
Работа с коллекциями
Обход каталога файлов
Использование программы LoopThroughFiles
Начало программы
Получение начальных входных данных
Создание списка файлов
Форматирование вывода
Вывод в шестнадцатеричном формате
Обход коллекций: итераторы
Доступ к коллекции: общая задача
Использование foreach
Обращение к коллекциям как к массивам: индексаторы
Формат индексатора
Пример программы с использованием индексатора
Блок итератора
Создание каркаса блока итератора
Итерирование дней в месяцах
Что же такое коллекция
Синтаксис итератора
Блоки итераторов произвольного вида и размера
Глава 8
Обобщенность
Обобщенность в C#
Обобщенные классы безопасны
Обобщенные классы эффективны
Создание собственного обобщенного класса
Очередь посылок
Очередь с приоритетами
Распаковка пакета
Метод Main ()
Написание обобщенного кода
И наконец — обобщенная очередь с приоритетами
Использование простого необобщенного класса фабрики
Незавершенные дела
Пересмотр обобщенности
Вариантность
Контравариантность
Ковариантность
Глава 9
Эти исключительные исключения
Использование механизма исключений для сообщения об ошибках
О try-блоках
О catch-блоках
О finally-блоках
Что происходит при генерации исключения
Генерация исключений
Для чего нужны исключения
Исключительный пример
Что делает этот пример "исключительным"
Трассировка стека
Использование нескольких catch-блоков
Планирование стратегии обработки ошибок
Вопросы, помогающие при планировании
Советы по написанию кода с хорошей обработкой ошибок
Анализ возможных исключений метода
Как выяснить, какие исключения генерируются теми или иными методами
Последний шанс перехвата исключения
Генерирующие исключения выражения
Глава 10
Списки элементов с использованием перечислений
Перечисления в реальном мире
Работа с перечислениями
Использование ключевого слова enum
Создание перечислений с инициализаторами
Указание типа данных перечисления
Создание флагов-перечислений
Применение перечислений в конструкции switch
Часть 2. Объектно-ориентированное программирование на C#
Глава 11
Что такое объектно-ориентированное программирование
Объектно-ориентированная концепция № 1: абстракция
Процедурные поездки
Объектно-ориентированные поездки
Объектно-ориентированная концепция № 2: классификация
Зачем нужна классификация
Объектно-ориентированная концепция № 3: удобные интерфейсы
Объектно-ориентированная концепция № 3: управление доступом
Поддержка объектно- ориентированных концепций в C#
Глава 12
Немного о классах
Определение класса и объекта
Определение класса
Что такое объект
Доступ к членам объекта
Пример объектно-основанной программы
Различие между объектами
Работа со ссылками
Классы, содержащие классы
Статические члены класса
Определение константных членов-данных и членов-данных только для чтения
Глава 13
Методы
Определение и использование метода
Использование методов в ваших программах
Аргументы метода
Передача аргументов методу
Передача методу нескольких аргументов
Соответствие определений аргументов их использованию
Перегрузка методов
Реализация аргументов по умолчанию
Возврат значений из метода
Возврат значения оператором return
Определение метода без возвращаемого значения
Возврат нескольких значений с использованием кортежей
Кортеж с двумя элементами
Применение метода Create ()
Многоэлементные кортежи
Создание кортежей более чем с двумя элементами
Глава 14
Поговорим об этом
Передача объекта в метод
Определение методов
Определение статического метода
Определение метода экземпляра
Полное имя метода
Обращение к текущему объекту
Ключевое слово this
Когда this используется явно
Что делать при отсутствии this
Использование локальных функций
Глава 15
Класс: каждый сам за себя
Ограничение доступа к членам класса
Пример программы с использованием открытых членов
Прочие уровни безопасности
Зачем нужно управление доступом
Методы доступа
Пример управления доступом
Выводы
Определение свойств класса
Статические свойства
Побочные действия свойств
Дайте компилятору написать свойства для вас
Методы и уровни доступа
Конструирование объектов с помощью конструкторов
Конструкторы, предоставляемые C#
Замена конструктора по умолчанию
Конструирование объектов
Непосредственная инициализация объекта
Конструирование с инициализаторами
Инициализация объекта без конструктора
Применение членов с кодом
Создание методов с кодом
Определение свойств с кодом
Определение конструкторов и деструкторов с кодом
Определение методов доступа к свойствам с кодом
Определение методов доступа к событиям с кодом
Глава 16
Наследование
Наследование класса
Зачем нужно наследование
Более сложный пример наследования
ЯВЛЯЕТСЯ или СОДЕРЖИТ
Отношение ЯВЛЯЕТСЯ
Доступ к BankAccount через содержание
Отношение СОДЕРЖИТ
Когда использовать отношение ЯВЛЯЕТСЯ и когда — СОДЕРЖИТ
Поддержка наследования в C#
Заменяемость классов
Неверное преобразование времени выполнения
Избегание неверных преобразований с помощью оператора is
Избегание неверных преобразований с помощью оператора as
Класс object
Наследование и конструктор
Вызов конструктора по умолчанию базового класса
Передача аргументов конструктору базового класса
Указание конкретного конструктора базового класса
Обновленный класс BankAccount
Глава 17
Полиморфизм
Перегрузка унаследованного метода
Простейший случай перегрузки метода
Различные классы, различные методы
Сокрытие метода базового класса
Вызов методов базового класса
Полиморфизм
Что неверно в стратегии использования объявленного типа
Использование is для полиморфного доступа к скрытому методу
Объявление метода виртуальным и перекрытие
Получение максимальной выгоды от полиморфизма
Визитная карточка класса: метод ToStringO
Абстракционизм в C#
Разложение классов
Абстрактный класс: ничего, кроме идеи
Как использовать абстрактные классы
Создание абстрактных объектов невозможно
Опечатывание класса
Глава 18
Интерфейсы
Что значит МОЖЕТ_ИСПОЛЬЗОВАТЬСЯ_КАК
Что такое интерфейс
Реализация интерфейса
Именование интерфейсов
Зачем C# включает интерфейсы
Наследование и реализация интерфейса
Преимущества интерфейсов
Использование интерфейсов
Тип, возвращаемый методом
Базовый тип массива или коллекции
Более общий тип ссылки
Использование предопределенных типов интерфейсов C#
Пример программы, использующей отношение МОЖЕТ_ИСПОЛЬЗОВАТЬСЯ_КАК
Создание собственного интерфейса
Реализация интерфейса IComparable
Вернемся KMain()
Унификация иерархий классов
Что скрыто за интерфейсом
Наследование интерфейсов
Использование интерфейсов для внесения изменений в объектно- ориентированные программы
Гибкие зависимости через интерфейсы
Абстрактный или конкретный? Когда следует использовать абстрактный класс, а когда — интерфейс
Реализация отношения СОДЕРЖИТ с помощью интерфейсов
Глава 19
делегирование событий
Звонок домой: проблема обратного вызова
Определение делегата
Пример передачи кода
Делегирование задания
Очень простой первый пример
Более реальный пример
Обзор большего примера
Создание приложения
Знакомимся с кодом
Жизненный цикл делегата
Анонимные методы
События C#
Проектный шаблон Observer
Что такое событие. Публикация и подписка
Как издатель оповещает о своих событиях
Как подписаться на событие
Как опубликовать событие
Как передать обработчику события дополнительную информацию
Рекомендованный способ генерации событий
Как наблюдатели "обрабатывают" событие
Глава 20
Пространства имен и библиотеки
Разделение одной программы на несколько исходных файлов
Разделение единой программы на сборки
Выполнимый файл или библиотека
Сборки
Выполнимые файлы
Библиотеки классов
Объединение классов в библиотеки
Создание проекта библиотеки классов
Создание автономной библиотеки классов
Добавление второго проекта к существующему решению
Создание классов для библиотеки
Использование тестового приложения
Дополнительные ключевые слова для управления доступом
internal: строим глазки ЦРУ
protected: поделимся с подклассами
protected internal: более изощренная защита
Размещение классов в пространствах имен
Объявление пространств имен
Пространства имен и доступ
Использование полностью квалифицированных имен
Глава 21
Именованные и необязательные параметры
Изучение необязательных параметров
Ссылочные типы
Выходные параметры
Именованные параметры
Разрешение перегрузки
Альтернативные методы возврата значений
Работа с переменными out
Возврат значений по ссылке
Глава 22
Структуры
Сравнение структур и классов
Ограничения структур
Различия типов-значений
Когда следует использовать структуры
Создание структур
Определение базовой структуры
Добавление распространенных элементов структур
Использование структур как записей
Управление отдельной записью
Добавление структур в массивы
Перекрытие методов
Часть 3. Вопросы проектирования на C#
Глава 23
Написание безопасного кода
Проектирование безопасного программного обеспечения
Определение того, что следует защищать
Документирование компонентов программы
Разложение компонентов на функции
Оценка рисков
Построение безопасных приложений Windows
Аутентификация с использованием входа в Windows
Безопасность развертывания
Построение безопасных приложений Web Forms
Атаки SQL Injection
Уязвимости сценариев
Наилучшие методы защиты приложений Web Forms
Использование System. Security
Глава 24
Обращение к данным
Знакомство с System.Data
Классы данных и каркас
Получение данных
Использование пространства имен System.Data
Настройка образца схемы базы данных
Подключение к источнику данных
Работа с визуальными инструментами
Написание кода для работы с данными
Использование Entity Framework
Глава 25
Рыбалка в потоке
Где водится рыба: файловые потоки
Потоки
Читатели и писатели
Использование Streamwriter
Пример использования потока
Как это работает
Наконец-то мы пишем!
Использование конструкции using
Использование StreamReader
Еще о читателях и писателях
Другие виды потоков
Глава 26
Доступ к Интернету
Знакомство с System.Net
Как сетевые классы вписываются в каркас
Использование пространства имен System.Net
Проверка состояния сети
Загрузка файла из Интернета
Отчет по электронной почте
Регистрация сетевой активности
Глава 27
Создание изображений
Знакомство с System.Drawing
Графика
Перья
Кисти
Текст
Классы рисования и каркас .NET
Использование пространства имен System. Drawing
Приступая к работе
Настройка проекта
Обработка счета
Создание подключения к событию
Рисование доски
Запуск новой игры
Предметный указатель