
- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .NET
- •Создание исходной программы
- •Тестовая поездка
- •Каркас программы
- •Комментарии
- •Введение в хитрости панели элементов
- •Повторное использование кода из панели элементов
- •Правила объявления переменных
- •Вариации на тему int
- •Объявление переменной с плавающей точкой
- •Ограничения переменных с плавающей точкой
- •Объявление переменных типа decimal
- •Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
- •Логичен ли логический тип
- •Символьные типы
- •Что такое тип-значение
- •Неизменяемость строк
- •Основные операции над строками
- •Сравнение строк
- •Сравнение без учета регистра
- •Отличие строк в разных регистрах
- •Преобразование символов строки в символы верхнего или нижнего регистра
- •Поиск в строках
- •Как искать
- •Пуста ли строка
- •Удаление пробельных символов
- •Анализ числового ввода
- •Обработка последовательности чисел
- •Объединение массива строк в одну строку
- •Арифметика
- •Простейшие операторы
- •Порядок выполнения операторов
- •Оператор инкремента
- •Сравнение чисел с плавающей точкой
- •Составные логические операторы
- •Вычисление типа операции
- •Типы при присваивании
- •Перегрузка операторов
- •Ветвление с использованием if и switch
- •Инструкция if
- •Инструкция else
- •Как избежать else
- •Вложенные инструкции if
- •Конструкция switch
- •Циклы
- •Цикл без счетчика
- •Правила области видимости
- •Пример
- •Зачем нужны разные циклы
- •Зачем нужны массивы
- •Массив фиксированного размера
- •Массив переменного размера
- •Свойство Length
- •Инициализация массивов
- •Понятие <т>
- •Обобщенные коллекции
- •Инстанцирование пустого списка
- •Создание списка целых чисел
- •Преобразования списков в массивы и обратно
- •Подсчет количества элементов в списке
- •Поиск в списках
- •Инициализаторы массивов и коллекций
- •Выполнение специфичных для множеств задач
- •Создание множества
- •Добавление элемента в множество
- •Выполнение объединения
- •Пересечение множеств
- •Получение разности
- •Не используйте старые коллекции
- •Обход каталога файлов
- •Начало программы
- •Получение начальных входных данных
- •Создание списка файлов
- •Форматирование вывода
- •Вывод в шестнадцатеричном формате
- •Обход коллекций: итераторы
- •Доступ к коллекции: общая задача
- •Использование foreach
- •Формат индексатора
- •Блок итератора
- •Создание каркаса блока итератора
- •Итерирование дней в месяцах
- •Что же такое коллекция
- •Синтаксис итератора
- •Блоки итераторов произвольного вида и размера
- •Обобщенные классы безопасны
- •Обобщенные классы эффективны
- •Очередь с приоритетами
- •Распаковка пакета
- •Написание обобщенного кода
- •Использование простого необобщенного класса фабрики
- •Незавершенные дела
- •Ковариантность
- •Использование механизма исключений для сообщения об ошибках
- •Что происходит при генерации исключения
- •Исключительный пример
- •Что делает этот пример "исключительным"
- •Трассировка стека
- •Советы по написанию кода с хорошей обработкой ошибок
- •Анализ возможных исключений метода
- •Как выяснить, какие исключения генерируются теми или иными методами
- •Генерирующие исключения выражения
- •Работа с перечислениями
- •Создание перечислений с инициализаторами
- •Указание типа данных перечисления
- •Применение перечислений в конструкции switch
- •Процедурные поездки
- •Объектно-ориентированные поездки
- •Определение класса и объекта
- •Определение класса
- •Что такое объект
- •Различие между объектами
- •Работа со ссылками
- •Классы, содержащие классы
- •Определение константных членов-данных и членов-данных только для чтения
- •Передача аргументов методу
- •Передача методу нескольких аргументов
- •Соответствие определений аргументов их использованию
- •Перегрузка методов
- •Реализация аргументов по умолчанию
- •Возврат значения оператором return
- •Кортеж с двумя элементами
- •Создание кортежей более чем с двумя элементами
- •Глава 14 Поговорим об этом
- •Определение методов
- •Определение статического метода
- •Определение метода экземпляра
- •Полное имя метода
- •Ключевое слово this
- •Когда this используется явно
- •Что делать при отсутствии this
- •Использование локальных функций
- •Прочие уровни безопасности
- •Методы доступа
- •Пример управления доступом
- •Выводы
- •Статические свойства
- •Побочные действия свойств
- •Дайте компилятору написать свойства для вас
- •Методы и уровни доступа
- •Замена конструктора по умолчанию
- •Конструирование объектов
- •Непосредственная инициализация объекта
- •Конструирование с инициализаторами
- •Инициализация объекта без конструктора
- •Определение свойств с кодом
- •Определение конструкторов и деструкторов с кодом
- •Определение методов доступа к свойствам с кодом
- •Определение методов доступа к событиям с кодом
- •Наследование класса
- •Более сложный пример наследования
- •ЯВЛЯЕТСЯ или СОДЕРЖИТ
- •Доступ к BankAccount через содержание
- •Отношение СОДЕРЖИТ
- •Заменяемость классов
- •Неверное преобразование времени выполнения
- •Указание конкретного конструктора базового класса
- •Обновленный класс BankAccount
- •Перегрузка унаследованного метода
- •Простейший случай перегрузки метода
- •Различные классы, различные методы
- •Сокрытие метода базового класса
- •Вызов методов базового класса
- •Что неверно в стратегии использования объявленного типа
- •Использование is для полиморфного доступа к скрытому методу
- •Объявление метода виртуальным и перекрытие
- •Получение максимальной выгоды от полиморфизма
- •Разложение классов
- •Абстрактный класс: ничего, кроме идеи
- •Как использовать абстрактные классы
- •Создание абстрактных объектов невозможно
- •Опечатывание класса
- •Реализация интерфейса
- •Именование интерфейсов
- •Наследование и реализация интерфейса
- •Преимущества интерфейсов
- •Тип, возвращаемый методом
- •Что скрыто за интерфейсом
- •Гибкие зависимости через интерфейсы
- •Реализация отношения СОДЕРЖИТ с помощью интерфейсов
- •Определение делегата
- •Пример передачи кода
- •Делегирование задания
- •Очень простой первый пример
- •Более реальный пример
- •Создание приложения
- •Жизненный цикл делегата
- •Анонимные методы
- •Проектный шаблон Observer
- •Что такое событие. Публикация и подписка
- •Как издатель оповещает о своих событиях
- •Как подписаться на событие
- •Как опубликовать событие
- •Как наблюдатели "обрабатывают" событие
- •Сборки
- •Выполнимые файлы
- •Библиотеки классов
- •Создание проекта библиотеки классов
- •Создание автономной библиотеки классов
- •Создание классов для библиотеки
- •Использование тестового приложения
- •Дополнительные ключевые слова для управления доступом
- •protected: поделимся с подклассами
- •protected internal: более изощренная защита
- •Размещение классов в пространствах имен
- •Объявление пространств имен
- •Пространства имен и доступ
- •Использование полностью квалифицированных имен
- •Ссылочные типы
- •Выходные параметры
- •Альтернативные методы возврата значений
- •Работа с переменными out
- •Возврат значений по ссылке
- •Различия типов-значений
- •Когда следует использовать структуры
- •Добавление распространенных элементов структур
- •Управление отдельной записью
- •Добавление структур в массивы
- •Перекрытие методов
- •Определение того, что следует защищать
- •Документирование компонентов программы
- •Разложение компонентов на функции
- •Оценка рисков
- •Аутентификация с использованием входа в Windows
- •Безопасность развертывания
- •Уязвимости сценариев
- •Наилучшие методы защиты приложений Web Forms
- •Получение данных
- •Настройка образца схемы базы данных
- •Подключение к источнику данных
- •Работа с визуальными инструментами
- •Написание кода для работы с данными
- •Использование Entity Framework
- •Где водится рыба: файловые потоки
- •Потоки
- •Читатели и писатели
- •Пример использования потока
- •Как это работает
- •Наконец-то мы пишем!
- •Использование конструкции using
- •Загрузка файла из Интернета
- •Регистрация сетевой активности
- •Графика
- •Перья
- •Кисти
- •Текст
- •Классы рисования и каркас .NET
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры

чаиниковДЛЯ V ®
Издательство ДИАЛЕКТИКА
о :ао 1. r- |
Джон Пол Мюллер |
при участии Билла Семпфа |
|
|
и Чака Сфера |

VДЛЯ ЛVЛЯД Д

ALL - IN - ONE
Ьу John Paul Mueller, Bill Sempf, and Chuck Sphar
CBPPMJ,S
deBPMce ,aCSJe

Джон Пол Мюллер при участии Билла Семпфа и Чака Сфера
ДЛЯвоириасенV ®
раеиос
Москва • Санкт-Петербург
2019

|
|
|
|
|
|
|
|
И.В. Красикова |
|
|
|
||
|
|
++ |
+ И+ |
-+.( + -( |
(р |
+. И+ е(1+е |
.1И+ |
п+ |
е+-1+-( |
+ е-+.п |
|
|
|
|
|
|
|
|
т |
|
тК |
|
и |
т |
|
т |
|
|
п |
+и |
+е |
+не |
|
(-К |
|
|
|
|
|
|
|
~а |
е |
(р |
+ ИК +-в. (и нв |
|
ВВВК |
п+(н+- |
+-( |
к-~ |
-а. в |
+ и |
(- |
в |
|
1+1в |
( |
|
К |
|
|
|
|
|
|
|
|
|
|
|
~дарс |
~-диоороар~ -п.в |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
а |
в~да |
к |
-иаиквдс |
|
|
|
|
ро |
|
р |
|
|
|
|
|
|
|
|
|
|
т |
|
|
|
|
|
|
|
|
|
|
|
|
|
п |
|
|
в |
К |
|
|
|
|
|
а |
|
п |
|
|
|
|
а |
|
|
|
|
|
|
с |
|
|
|
|
|
|
|
|
т |
|
|
|
|
|
|
|
|
|
|
|
|
- |
в |
псв |
|
д |
|
|
|
|
|
|
- |
( |
е |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
е |
|
|
|
|
|
|
|
|
и |
|
и |
|
и |
к н |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
с
1н |
В т~ |
|
тти |
( .птт |
Ки |
|
аас+ |
К |
и |
|
|
|||
|
|
|
( |
|
|
|
|
|
|
|
|
|
|
|
|
+е +.( |
+И + |
(1 -ои-~вк-и~в +- |
(1 д- |
и-- |
и |
|
|
|
|||||
|
|
.ни + нКаа -и Кр+ еК а а |
|
|
|
|
|
|
||||||
|
п+ К1+-( |
с-- - в(-( |
дос |
|
|
|
|
|
|
|||||
В1 |
(1(и+И |
В |
|
+-ВИ( -( |
|
+И( + + |
|
-( |
+ |
|
|
|
||
|
+е+(н |
|
+ +И.-+р+ |
|
пИр+- |
|
|
|
|
|
|
|||
ока-- |
+.-+И.-( |
+ н(.1 |
К + |
+Ип |
и + + |
-( |
|
+.1+Иеи |
|
|
||||
(р1 |
|
|
|
т |
т в |
|
1+е |
а в о~~кд-рдарс~ |
|
|
||||
ВВВ п+(н+-1+-( ~с-кд |
(и-1р |
+ |
+- п- ( |
и+1+ |
-.- пе |
е |
а- |
е+1 |
+ |
аоаи |
||||
-п.К |
|
|
|
|
|
|
|
|
ВВВ |
п+ |
+ |
+-( -и~ |
||
(и |
в |
|
|
|
|
|
|
|
|
|
п |
|
|
.в |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ + |
|
-иа |

Оглавление
|
|
|
||
и |
и |
и |
|
и |
и |
и |
и |
и |
|
и |
и |
и |
и |
и |
ии и
и |
и |
и |
|
|
|
|
|
и |
и |
и и |
|
|
|
|
|
и |
и и |
и |
|
|
|
|
|
и |
и |
|
|
|
|
|
|
и |
и |
|
|
|
|
|
|
и |
и |
|
|
и |
|
|
|
и и |
и |
|
|
и и |
и |
||
и и |
|
|
и |
и |
|
|
|
и |
и |
|
|
|
|
|
|
ии
и |
и |
|
и и |
и |
и |
и |
и |
и |
|
и |
|
ии
и |
и |
|
|
|
|
и |
и |
|
|
и |
|
и |
и |
|
и |
и |
|
и и |
|
и |
и и и |
ии
и |
и и |
|
и |
|
и |
и |
и |
и |
и |
|
и |
|
|
и |
и |
и |
и |
|
|
|
и |
и |
|
|
|
|
|
и |
и |
и |
|
|
и |
|
|
|
и |
и |
|
|
|


Правила объявления переменных Вариации на тему int
Представление дробных чисел Работа с числами с плавающей точкой
Объявление переменной с плавающей точкой Ограничения переменных с плавающей точкой
Десятичные числа: комбинация целых чисел и чисел с плавающей точкой
Объявление переменных типа decimal
Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
Логичен ли логический тип Символьные типы
Тип char
Специальные символы Тип string
Что такое тип-значение Сравнение string и char
Вычисление високосных лет: DateTime Объявление числовых констант Преобразование типов
Позвольте компилятору С# вывести типы данных
,мжгжызaыT жoрaжы.ры.aiр)ждrы Неизменяемость строк Основные операции над строками Сравнение строк
Проверка равенства: метод Compare () Сравнение без учета регистра
Изменение регистра Отличие строк в разных регистрах
Преобразование символов строки в символы верхнего или нижнего регистра
Цикл по строке Поиск в строках Как искать
Пуста ли строка
49 50
51 52 53 54
56
56
56 57
57
58
58 59 60 61 62 64 65 66
69 70 72 72 73 76 76 77
77 78 79 79 80
Содержание тн

коу
коу
кау
кту
Гu Гu Гu клу лау лну иН
ллу ллу аооу аооу аону аону иору иоту иосу иооуту иоку ииоу ииоу
аару
иату
аасу
ааку
аалу
аноу
анру
ансу
ансу
ароу
ароу
Содержание

Содержание жt


Метод Main ()
Написание обобщенного кода И наконец - обобщенная очередь с приоритетами
Использование простого необобщенного класса фабрики Незавершенные дела
Пересмотр обобщенности Вариантность Контравариантность Ковариантность
,мжгжыnмы[ arыr.)мeдr aSмuхgSы r.)мeдSхr/ы
Использование механизма исключений для сообщения об ошибках
Оtrу-блоках
Осаtсh-блоках
Оfinally-блoкax
Что происходит при генерации исключения Генерация исключений Для чего нужны исключения Исключительный пример
Что делает этот пример "исключительным" Трассировка стека
Использование нескольких саtсh-блоков Планирование стратегии обработки ошибок
Вопросы, помогающие при планировании Советы по написанию кода с хорошей обработкой ошибок Анализ возможных исключений метода
Как выяснить, какие исключения генерируются теми или иными методами
Последний шанс перехвата исключения Генерирующие исключения выражения
,мжгжыd"ыaыеir.)rы CмSдSх aргы.ыr.iрмuкргжхrSды iSiSдr.мSхrsы
Перечисления в реальном мире Работа с перечислениями
Использование ключевого слова enum Создание перечислений с инициализаторами Указание типа данных перечисления
Создание флагов-перечислений
Применение перечислений в конструкции switch
ta)П,гi5Пы
210
211
212
215
217
220
221
221
223
225
226
227
228
228
229
231
232
232
234
235
235
238
238
239
241
243
244
245
247
248
249
250
251
252
252
254
llы

Часть 2. Объектно-ориентированное программирование на С#
джМоМ |
в М ввб б вев кбе к |
воМеевб Мк воМекб |
|||
· -5в# |
#.--в5-.#М-вв-I#в -7 |
-I |
-·B5.- и-I |
||
.#и-4S.в8-7#-А4 - |
|
|
|||
· -5в# |
#.--в5-.#М-вв87#- -А4 - |
|
|||
· -5в# #.--в5-.#М-вв-I#ви-7 -I |
3-BB-о- - -I |
||||
-С-0вSЛв- 3-BB-о- - -I |
|
|
|||
· -5в# |
#.--в5-.#М-вв-I#ви-7 |
-I |
S4#·в8--в5-.о-ДB8 |
||
· -5в# #.--в5-.#М-вв-I#ви-7и-I |
S7.-М3-в--4#B5S7#0 |
||||
#44-.Л -#· |
- 5в# #.--в5-.#М-вв8ь#в |
-7 -ДМ |
|||
джМоМ бев вв джМттМ |
|
|
|||
7.-4-3-в-- 3-BB-- #· - 5- |
|
|
|||
7.-4-3-в-- 3-BB- |
|
|
|||
5#- #- #· - 5 |
|
|
|
||
#B5S7С3-в-0#· |
- 5- |
|
|
||
.-0-. #· |
- 5в##Bв#М-вв#7Д.# |
.-008 |
|
||
-А3-С--0-Л4S#· |
- 5-0- |
|
|
||
-·#5-B#BB83 -0- |
|
|
|
||
3-BB8B#4ъ -.Л-о-- |
3-BB8 |
|
|
5-5-С-B --С3-в8 3-BB-
7.-4-3-в-- #вB5-в5в8ьС3-в#М 4-вв8ь - С3-в#М 4-вв5#38ь 43I#С5-в-I
джМоМ б в |
|
7.-4-3-в-- - -B7#3 А#М-в0--5#4- |
|
B7#3 А#М0-в-5#4#-- ММ-к-ь 7.# .-00-ь |
|
. S0-в580-5#4- |
|
-.-4-С--. S0-в5#М0-5#4S |
|
-.-4-С-0-5#4Sв-B #3 -ь-. |
S0-в5#М |
##5М-5B5М#7--.-4-3-в-Д-. |
S0-в5#М-ь -B7#3 А#М-в-М |
-.- .SА -0-5#4#М
--3-А-и-I-. S0-в5#М7#S0#3С-в-М
#АМ.-Ав5 -С-в-Д-А0-5#4-
#АМ.-Ав5 -С-в-I #7-.-5#.#0
7.-4-3-в-- 0-5#4-·-А М#АМ.-о--0# Ав#-С-в-I
#АМ.-в5-B #3 -ьАв-С-в-ДB-B7#3 А#М-в--#0.5-Л-Д

Содержание 13


Содержание 15

Звонок домой: проблема обратного вызова Определение делегата Пример передачи кода
Делегирование задания Очень простой первый пример
Более реальный пример Обзор большего примера Создание приложения Знакомимся с кодом Жизненный цикл делегата
Анонимные методы События С#
Проектный шаблон Observer
Что такое событие. Публикация и подписка Как издатель оповещает о своих событиях Как подписаться на событие Как опубликовать событие
Как передать обработчику события дополнительную информацию Рекомендованный способ генерации событий Как наблюдатели "обрабатывают" событие
"d1р1 ыдлl "I,P"1l,Pр1 |
lEIl l (l(dlIPIтl |
Разделение одной программы на несколько исходных файлов Разделение единой программы на сборки
Выполнимый файл или библиотека Сборки Выполнимые файлы Библиотеки классов
Объединение классов в библиотеки Создание проекта библиотеки классов Создание автономной библиотеки классов
Добавление второго проекта к существующему решению Создание классов для библиотеки Использование тестового приложения
Дополнительные ключевые слова для управления доступом internal: строим глазки ЦРУ
429 430 43 1 433 433 433 435 435 436 439 441 443 444 445 445 446 447 447
449 449 450
453 454 455 455 456 457 458 458 458 459 460 462 463 464 465
16 Содержание

Часть 3. Вопросы проектирования на С#
джМоМ М |
ктМекб в |
Мтев |
вМ |
|
||
.N-3.-.N1---- |
·- |
N7-Ю-N7гN.NЬ.-00-NЬNN·-Ю7-С---I |
|
|||
7.-4-О---- .NгNС.NЮО-4S-. -о-о-.Д |
|
|||||
N3S0-- |
.-.N1---- |
3N07N |
---.N1 7.NЬ.-008 |
|
||
- |
ОNЛ----3N07N---.N1 -- |
оS-3и |
-- |
|
||
·-- |
.SЛ---- |
7N.-- |
и--ОД-8ЧSг.N |
1 оS-3и-IЧ |
|
|
и--3-.-Ю3N1 |
|
|
|
|
||
|
|
|
|
|
Содержание |
1 |
|
|
|
|
|
7 |


Содержание 19
