
- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .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
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры

Перегрузка унаследованного метода
3, !,$)3'1! |
. 6.3." |
iы |
3.!(3 |
)! )('1!,3(,1$ |
С |
'1"),!..,! |
(,1"(!,!. |
(,1! |
-( |
$(,1"(. !,$'13,!.," |
$(,1"'13е .$E. |
., |
'13..$.3..). |
,!.$ |
.")(.3 |
. $.$ (.,, |
.0 |
3'1 |
|
6-(,1"'1(!._ |
|
|
|
|
|
|
|
|
|
Простейший случай перегрузки метода
|
|
.1 .,.".1 |
. |
" |
...1.".... |
|
|
..,.1.. |
.1... |
1.... |
|
ээ |
м |
|||
|
зи |
л |
|
ип |
|
л.1..,...С |
|
.,.".1 |
..1."..... |
|
|
.1.... |
,1" .1.5..,.."g |
|
||
|
1" |
..,.. |
|
...".... |
,."." |
|
|
nг .....,..,Сф |
|
.1. |
.".1.1." |
. |
..,...К,. |
|
||
БnЧРЛПГ.и |
8.11.,.., |
|
... |
".."1" |
|
.,...1 |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
.зТ9 |
" . ч |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
г |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
г |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ф |
|
|
|
|
|
|
|
|
|
|
|
|
|
Ф |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ф |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
и |
|
|
|
|
|
|
|
|
|
|
... |
nг |
. .".. |
".... |
|
. 1....1.. |
|
9.. |
.,.".. |
." |
.. |
1.1..,..1.e |
|
1.... |
.. |
||
...".". |
. .,."., |
|
8рth"..1К1,... |
|
. |
..",.. |
.,."..e |
|
|
|
|
|||||
|
п"...1К |
|
1,... |
|
... |
., |
....,... |
.1.... |
|
.1.5..,.."1" |
..,.. |
.,.".1 |
||||
|
.1. |
.." |
.. |
., |
.".,., |
|
..,.. |
..1 .,.".1у |
|
.1....1.К.,.. |
."..." |
...1 |
||||
БnИРЛ ПГ.и |
.. |
."...1К1,."1" |
|
|
..1.,...e |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"-,. |
. и8 |
.2s... |
. " |
".... |
..". . . . ". .."6 . ... |
..". .... |
. . |

Различные классы, различные методы |
|||
#1. 7-7. #.3)!k >.! |
.. |
(-- .!.! |
,!-1 .,7)(..#67. |
>(-.37 #W!,(-ch7,#))!W! |
|
7-#)7 |
(---!.,7- -.#.17 |
.#.-.( |
|
|
|
.S
w у
w у
.S
w у
w х
.S
w х
2S
w у
w х
w у
w х
- 73
#.!.м .(.6# f,(W-
#).
-.()!-C.-1 7-F!.)!W!
-1..(--( |
1-.1#.-1 |
>(-.37 |
,(-ch7,#))!W! 7-#)C -#.!.(м .(. |
>.! ..1 |
lМa-#.!. |
эгeКК |
SsтimaТ)# |
7-##. )7 >#W!!2e#W! - -#.!.!- |
Мгe К К |
SsтimadТ |
|
|
|
Сокрытие метода базового класса
|
.(.м -#.!. |
!.)!W! |
..(--( |
-!6#. |
.#,#W,16(.3 |
.,1W! |
-#.!. |
.!W! |
6# ..(--( |
||||||||||||
#-.7 7-.!.321#. |
., 1W7#(,W1-#).0 |
|
С(. |
!.( |
0-(#.-1У |
-#.!. -!6#. .(.6# |
|
a#,#r |
|||||||||||||
W,16(.3 |
|
-#.!. |
2(2!-! |
! ..(--(d |
#,#W,12.( -#.!.( |
2(2!-!W! |
.. |
(--( |
72-#-.)( |
||||||||||||
.(. |
P0cFS 3:2 |
|
-#.!.х( un |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
,#.a!. |
!6C- |
-(ch 2(). |
.,!-!. |
7. )!-1 |
|
a!.7.7 |
.1k |
- -!!.-#.- |
.-77 |
- |
.!.!i |
|||||||||
,!3 |
-)1.C# |
- |
.#.!2C.)!W! |
|
->#.( !..7>(#.-1 |
!. |
., 1W7F.Ca!- |
-)1.C1 |
-! |
->#.( |
|||||||||||
|
,#..!. |
|
!6C- |
..1 |
.!). |
,#.)!-.7k |
>.! |
.(6.!# |
|
-)1.7# |
-! |
->#.( |
!2F!.C |
.-1 |
-..(.r |
||||||
>7.1 - |
в |
йО.!..(,(d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
,7 7-a! |
.о2!-() |
77 f1).c7 !)(.3)!W! |
|
a!.F!.( |
-0 -!6#.# |
,#(.72! |
-(.3 |
g.1 |
||||||||||||
.!.7.7.1 |
|
a!- ,#.-.-! |
-a#,#-#))!3 |
f.( |
( |
- .. |
(--#k |
.!,03 1.(20-(. |
20k a,7 |
||||||||||||
)(..#67. |
|
!2 |
#.. .7a1 |
eП ТhrК |
ppima7.C |
e |
s |
|
ppimaг g.!-Н -.s1>(# -#P!. |
||||||||||||
-)1.71 |
-! |
->#.( .!.6#) |
a,!-#,1.3 |
2)(>#)7# f.(W(м >.!20 |
-01-) |
|
7.3м -.#.1#. |
.7 |
ГЛАВА 1 7 |
#f . #- |
. С |

378 |
р |
Э 0 0361Э1у630 42110Эю30 423 ее 63 0 4216Э142 |


380 |
4 |
014-- -- 10- 0---4 0- 088 10- 0-14 -0 |

!ЕТССЕТЧЕТВ!НЧЗСНЧВНСЕТОhoЕТОЗВЕТОВTs ceB,ehhРi!leК cКB5zдs·i ЧЕТЗ ПОWЕ1BВЕТЗВЕТОВЕТС1О!О!ОeWСЕТЕТС serehhРi!leК Кc zB5дs·i j СНВССЕТОю ЕТСВЕТНВПОЕТСВВЕТЕТ!ВННОЕТЕТСWСНЕТОЗc WlБЕТОЧ!О1ЗО!НОo ЕТС1О!ЕТИeWСЕТЕТ
СОВЕТ ВОW!ВНЕТСЗССЕТОЕТСЕТЕ!ОЧЗЧhWВНСЗЧВСННЕТЗЧo l
Чем сокрытие лучше дополнительной проверки
|
0 I-4з |
г збы |
К?,а0з -1е- |
|
0зы06-5,? |
|
|
|
|
|
|
|
I4-? |
||||||||
В50з |
К-5ВКа, |
--I4,В5 |
6 4- |
-1е-6 |
н-6 I4-? |
,е-11 |
г |
з04е015 В В,л4 |
5е-6 |
||||||||||||
6-5,?0 а0б,з,ы, л |
0ВВ0 л,1 |
-л,1 |
,з |
еВI, вб,з01е- |
|
|
0I,54ы0 -а,з0 |
, |
?, |
||||||||||||
а0з |
-1еКзВ-ы, е |
нв-5 |
|
4-оВ54,л ?з- еб л,5,4 |
о I4,В5, |
|
еыЧ41 |
Вл- ,але |
|||||||||||||
|
|
?10л, I4,В5,- |
4- |
-1е- I,4,е?0-5 |
|
В |
,е1 |
-I4,а |
|
-6 |
|
|
-4з0Кб0л |
|
н0 |
||||||
-5ВКз 5,6 |
н5, |
л |
0ВВ |
|
|
|
1- |
?, |
|
е-1 а-ВI,л,е5вВК |
, |
?-50 |
Ко40а,5 |
||||||||
|
|
|
|
|
з, ,4К |
|
,460 |
в1, |
5,104Ч |
0-5I4е1 |
|
еI |
е1л0IВЧ К |
ее 0 |
|||||||
б,з |
|
г л 0ВВ1- |
?, |
е-1 1ен-ы, б105в , Вз,ео I,5,6л0о |
|
I,5,6Ч |
н5, |
5,з-?-5 |
|||||||||||||
л 4-0 |
в1,г I4,а -6- |
4-?I, |
,ее6 |
а01л 4- |
0-5?,а0зе5в |
|
1,з |
- Вн-50 10 |
|||||||||||||
I4е6-4 |
у |
|
|
|
|
|
|
|
|
|
|
л0е?, ы, еб 1 |
|
Вз,е |
|||||||
I40зе |
0В1К5еК ?-1-ы В, |
Вн-50 е л0е? |
г еВI, |
вбЧ-5 В,аВ5з-11 |
г |
|
0 |
, |
|||||||||||||
В |
-54-о |
н-5 |
4?,-оа0з |
-1ег 1,з |
о 5еI,з |
Вн-5,з В504 |
г6-5,? |
|
|
|
|
||||||||||
|
|
|
10не10-5 з ы К?-В5в е л,6 В ,е1 6 |
0е? г1,з г зе? Вн-50 |
|||||||||||||||||
I4ез,?е5 л, зВ- а |
в |
|
еб66-1-1еК6 |
|
5,ы,6-5,?0 |
0л,-4- |
-1е- В,з-4 |
|
-1 |
||||||||||||
1, |
1- |
I,?о,?е5 |
|
0ВВ?, |
е1 |
|
,5з-н05в В06е б0В-аК |
|
|
|
|
|
|
|
|
Случайное сокрытие метода базового класса
|
0л1е В54011, |
6-5,? а0б,з,ы, |
л |
0ВВ6,0е-5 |
,л0б05вВКВл4 |
5 |
I4,6В5, |
||||||||
В Чн0г1, |
ЧВ5в10I4е6-4 |
е6--5ВК 6-5,? |
у |
|
у |
у |
|
л,5,4 |
г 10не |
||||||
10-5 ?зее-1е- |
5401ВI,451,ы, |
В4-?В5з0 |
,бел5, |
5,6,е-5 |
40В |
е4е5вл 0ВВ |
|||||||||
у |
Ву,б?0з л |
0ВВ |
|
,1уК51, |
н5, 6-5,? |
|
у |
|
|
5,ы,л |
0ВВ0 |
||||
В,з-4 |
-11, е1,г |
н-6 л ВВ0 0 у |
|
у н-зе?1, |
н5, |
5,В |
Чн0г |
,е1,г |
е |
||||||
?-В5з-11,В5е |
?з0 6-5,?0 |
1- е6- |
51ен-ы, ,а |
- |
,л4,6- |
е6-1е |
Вн0В5в |
||||||||
з В,В5,К1ее ,а104Чее5в |
5ЧI4,а |
-6Ч |
|
|
|
|
|
|
|
|
|
||||
|
б л |
ы-1-4е4Ч-5 б |
,з- -ызе, |
?0 |
I4-?ЧI4-е?-1е- |
I4е |
л,6Iе |
К |
ее |
||||||
40ВВ6054ез0з -гВК401-- ?-6,1В540 |
е,11,г I4,ы4066 |
|
|
|
|
|
|
||||||||
бзВ-ы, ? |
е11,ы, 5-лВ50I4-?ЧI4-е?-1еК |
е15-4-В I4-?В50з |
К-55, |
вл,1- |
|||||||||||
а, в |
0-Кы, н0В5в 0 е6-11, |
|
|
|
|
|
|
|
|
|
|
|
|
б |
л I |
50-5ВКВ,,а е5в |
н5, |
з 10IеВ0 е з I,?л |
0ВВ- 6-5,? |
В 5-6 е- |
е6-1-6 |
н5, |
е Ч 6-5,?0 а0б,з,ы, |
л |
ВВ0 0 -гВ5зе5- в1, |
ез о,5е5- |
е6-11, |
5,ы, |
|
|
|
|
|
|
ГЛАВА 1 7 .3 21 23451127 xГwн