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

Понятие <Т>
thg,(F 1,, (ББ! |
-0WankA1.1e(F2( |
(11F - |
,(ФankAм вШ |
!Ф!2Б(trу(#,-#1,!б .1.( |
||||||
Ф1.#, |
!-#e#ББ#. !,!,iВ |
,#(.3Б0 |
,( |
|
Ш ,!Ф0 -i2-(,3 . 6(2Б( |
g,!, 1(--!r |
||||
.5trу#1.(В !ФЗ#., |
#W!:2P3>2З: Fima 3 |
1,#-1.(2(Б(1 |
,#(ankA3Б!W!,( |
( |
||||||
|
|
|
|
w ш |
|
|
|
|
|
|
|
rП СЗКИП) ДККИПЧКОК"'JН!НИАЕОК!Н"'JМИО.)ИПАНo.ПКИЕrЕТБННО!1rНИ!Иe |
|||||||||
|
ЕТИ"'JОeОАМrН uНrНМЕИН.,ЕО!"'JО М"'JЕАНa"'JМНОПНАВ |
aРe !ЕТБАМ |
||||||||
|
rОП eeРefae., |
|
De,.ТЕХЕ!eМАo!o |
-ЕАНАМeОПОНБ |
ОА"'JР!В"'JИЕПБe |
|||||
ЗАПОМНИ! |
ЧИ"'J"'JНБПОНОПНМПЕИЕАО., |
"'JИeЕО!"'JО МЕrОЕТВКОПНАВПЕИ !АО ЕeО!"'JО |
||||||||
|
"'JНrИЕИН . |
\ |
МЕТМ c\ |
pТЕХ\ Е!.С!"'JО !ЕТБrНННЕИАННАМrНпри |
||||||
|
ра,я ювпя йбтло |
л л з вок( |
мйсевива л , ире,иа |
,е тоттатhзю |
||||||
|
oБtшщь т,шБгеш гQтe.еm л вейт( tылоsкапк всайбювпя кле виFе k |
ктя ттюLеи кня и,еaа,игл пляие,,ir п ттюLериаьар,оео Fоида ло би,еаваwтет Fоткиолевкпяветир птолесар(
Обобщенные коллекции
э,( 1!-,# -#ББ0#.!..#.я(( |
52-#1,Бi .(. 0de0de222S2 |
ЧхЧьunompБ1-(ankA1 |
|||||
7,11 |
!Ф!Ф e#Б Б0-5 - ,!- 1-i1ankA#trу,! |
11,!В ch(ФankA!- 6ББ! 2( |
!ankAБ.7(,3Фi- |
||||
,( |
-! .ankA11!2.(Б(1 |
.!32!-(,#.31.!В |
.!.ankA#я.(( |
ь1ankA5!Ф!Ф e#Б Б0В 1 |
(1!. |
||
юrim .(6#,11 -(- .(.!В |
,! W!ankA!-!ankA!-(-.!В |
!-!6#, ,(2!Ф,(,311 |
- Б#В |
||||
WankA(-k( ompФ!Фe#ББ!1,3 |
i |
|
|
|
|
)!-, ,- (,( ... - .. ..0 #(0
td
r,#. !ankA!65-Б16Б! 1!F,( |
Б5,3 |
1 |
(1!. |
!ФЗ#.,!- |
.(6.0бВ |
(2 |
.!,!,iF |
|||
,#.1,(-ankA !.(Б#, |
g.#-#Б, -(ch#В |
|
.й.ankA#я((Ш. |
,( (1 |
! .32!-(Б(( |
-(11(r |
||||
-( g,! |
-!6#, -iWankA1.#,31ankA#.17e(-!Ф,(2!- |
|
|
|
|
|
||||
|
|
Ж0 |
ш0 |
|
|
|
|
|
|
|
th1ankA1trу1(# (1.( |
.!. Ф1.#, |
-0W.1.#,3 |
1.#.17e(- |
!Ф,(2!- |
|
|
|
|||
|
|
w ш |
Р ш |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
А 0 |
: ш |
|
|
|
|
|
|
|
С!. |
-0W.1.(, |
!trу!,(.Б(.!-!б |
5 |
Б(.(.(F |
,#(-1e#1,- |
1 |
(1.( |
Б(. -(1r |
||
15-!- |
Б# -(.Б!Ш |
! trу,! ,!(2!В.#, |
|
!1.# |
,!W! .(. |
-i .!Ф(-(,# |
|
1,3.#11, |
ГЛАВА 6 Глава для коллекционеров 157

|
П!.i!! |
D!d |
!.i!!!.i!! |
t!!! |
!!!.i!.i!Do !!D!! |
!.i!!!!D!!B |
!-s:! |
f |
t !!!i |
||
|
!.i!!!B-i!D!AD! d!!!! |
З!!!n |
ЗWemn!.i!!!,;!! !!!D!!,!B |
!-s:! |
fA! |
||||||
|
!!D!A!.i!D! |
t |
o! A! !!!DA! |
D!-ifD!!B |
!!!!! |
eП!!, !-s:!!!! |
|||||
ВНИМАНИВ |
t |
e |
!-,-i!!!!BA! |
!!!D!!!! |
! |
!d!-!! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Инстанцирование пустого списка
th1.#.17e#- |
f,(F-#2.# |
.!.(2(2! |
(21.(2c(,!6(2(# |
2!6! б .11.!F! |
1.(1.( |
||||||
!2З#..!6 |
.(.( |
rimrnю |
с,1F(Тhr-( |
1.!6(- |
1б.(1!. |
.,#.2(22(B#2 |
.. |
m,(Б #Б 1 |
|||
.!.3.! |
1.,!. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
0 |
|
|
|
|
|
0 |
|
|
|
|
0 |
|
|
|
|
ц((# r(#2(,0 |
,Р0ц( |
(# |
ф ,0e |
ц((#r( |
|
#2(,0 |
dea. |
|
|
|
gdef-0,М. 7
|
u т |
|
|
|
|
|
|
( |
|
|
|
|
u |
|
u 0 |
0 тт |
|
|
|
( |
|
|
|
э.#-#2.0 |
6 1.(1!. |
rim.!2(6 |
|
.17.11 |
.,( |
.!-!e( |
-#.!.( |
ТТ |
,5 |
||
6#.#220В 60ch#.!. |
11.#ch2! |
.!2(6.1#. |
1.,!.1 |
6 1.(1!.е |
2! .,( |
.!.l..# |
.! |
||||
2(6(.3 |
c#.!# |
1.(!.( !2З#.. |
.(.( |
пimНТS .!-im.(.1.!, |
1!!2e(#. |
!2 !ch(2 .# |
|||||
с(22lВ |
1.(1!. |
(21.(2c(,!6(2 |
..1 |
1.,!.б |
.(. |
B.! !2# |
.!.0..( |
.!2(6(.3 |
2# |
||
1.,!.1 |
!.6#,F(7.11 |
.!-.(.1.!,!- |
|
|
|
|
|
|
|
|
Создание списка целых чисел
th1.#.17e#- f,(F-#2.# .!.( |
(21.(2c(,1#.11 |
2!60В |
1.(1!. |
..1 .(.( |
imб |
||
2(.#- 6 2#F! |
.!2(6.17.11 |
.6( 22(B#251 |
im!1.# g.!F! |
c(.. |
нrnSep.,!F! |
|
|
.(. .! 1.(1.1б |
606!.1 |
F,(21e(#11 |
6 2#-B(1.( |
|
|
|
|
|
|
|
Т ц |
|
|
|
|
|
Б т |
|
|
|
|
|
|
|
u т |
|
|
|
|
|
|
|
u0 |
|
. т |
|
|
|
|
158 вчягии cи Основы программирования на С#

Соэдание списка для хранения объектов
th!B#d# .)!- fd(F -# |
|
.#.!.( 7)-.()я7d1#.-1 |
2!60 |
-А 7-!. |
..1 |
Fd( |
#) 1 |
||||||||||
!2З#..!6 |
|
6.-!16 7 6 )#F! |
.!2(6.17.-1 |
.6( ! |
З#..( Аd7 А!-! |
7 -#.!.( |
1--2 0 |
||||||||||
omp2d(.7.#6)7-()7#У .(. 2(.#- 6 -А7- !. 6)!-7.-1 |
даййгап!2З#..!6 |
6.-.16T..1 |
|||||||||||||||
B#F! 7-А!. |
321#.-1 -#.!. |
1--u#10! S 0aэ.!. |
-#.!. |
А! |
6! |
1#.!2(67.3 |
6 -А7-!. |
||||||||||
-(--76 |
7.7 Аd(..7B#-.7 |
.7217 |
.!.. |
#.я77 |
!.27- .# |
-.67#- |
|
|
|
|
|||||||
|
|
|
= |
|
|
|
= |
= |
|
u т |
|
|
|
|
|
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
||||
|
|
|
= |
|
|
|
= |
|
|
|
|
|
|
|
|
||
U(= *( |
|
)(= *() |
== |
= |
|
|
|
= |
= |
|
|
|
|
|
|
|
|
|
|
|
= |
*( |
()( |
d-=*( |
= |
|
|
= |
|
|
|
|
|
|
|
|
|
|
)(= |
|
|
|
|
|
|
|
|
|
|||||
|
-= =-((==(;=( i===i=G=E-(=(=(== |
=(=(==(=== =(-()=(==;= |
|||||||||||||||
E(=-(=(======5=(=;(=)(G( ===)(5;(== ; E =(-()=(== |
i(===(==)(( -(5 |
||||||||||||||||
=( 5 |
=5;( |
( =(;=( -(=(=======(=()==m=(-(==(==( |
=5=;= =5;( |
|
|
|
|||||||||||
Преобразования списков в массивы и обратно |
|
|
|
|
|||||||||||||
lА7-!. |
7 -(--76 .#F.! |
Аd#!2d42!6(.3 |
!.7) |
6 .d1 ! |
|
.!20 |
6)#-.7 |
-(--76 6 |
|||||||||
-А7- !.ж 7-А! .321#.-1 |
-#.!. |
-А7- .( |
1--u#10! |
S 0 А!.( |
() |
0 60ch#dс.1 |
Аd#!2i |
||||||||||
d(2!6()71 |
-А7- .( |
6 -(--76 |
7-А!.321#.-1 |
-#.!. -А7-.( |
|
(1..#S |
S 0 |
|
|
|
|||||||
|
|
|
|
u ш |
|
|
|
|
|
|
|
|
|
|
|
|
|
Подсчет количества элементов в списке |
|
|
|
|
|
|
|||||||||||
сankA1!Аd #.#.#)71 .!.7B#-.6( |
|
.#-#).!6 6 |
г d |
7-А!.321#.-1 |
-6! |
-.6! |
|||||||||||
O(. 1, |
э.! |
-!6#. |
Аd76!.7.3 |
. )# Аd71.)!-.1- |
#-.7 |
60 Аd760..7 . |
-6! |
-.61 |
|||||||||
w!10,L 1 -(--76!6 7 -.d!. |
|
|
(А!-)7.# |
1 .!..#. |
я7 |
|
.! -6! |
-.6! )(206(#.-1 |
|||||||||
O(.16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ГЛАВА 6 f x xтfQ ж#ff.ж #,. .-#. |
АГиз |

Поиск в списках
|
|
.. .,..". |
."..".".". |
|
.".... |
9.,.,... |
|
|
. .. |
...,e |
,.". |
|
п . ." |
4 |
. б .".В |
||
... |
.,. |
...,.. |
..." |
." |
9.,.,... |
. ....., |
|
|
,...н ...".". |
|
9.,.,.. |
. |
....., |
|
|||
". .3. |
...3,. |
СeО ....,.,.." |
|
...,, |
."., |
.,.".. |
....3,... |
... |
., |
"... |
,.., |
. |
|||||
9.,.,. |
|
.3 . |
."." |
. ...,..". |
. |
.,.".. |
|
.... |
,... |
. б д |
.31., |
|
.,.".. |
|
.".... |
|
|
9.,.,. |
|
.".у |
.. ..... |
.,.". |
|
.3.,...",... |
|
. |
..г,. |
|
., ."...... |
|
|
|
|
|
|
|
|
|
|
|
|
Р |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Р1 1 |
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
11 11 ) ;
Прочие действия со списками
|
О .. ..,., |
..". |
|
..., |
8....,.., |
|
|
|
..,......,." |
|
|
|
|
, |
|
, .,..". |
." |
|
".,.. |
.. |
|
|
." |
||||||||
.... . |
Фг. . |
|
о.. .. |
.. |
.".... |
|
"..3 |
к.. |
....3 |
|
|
. 3. |
.., |
., 9.,.,..". |
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
Р |
Р |
|
|
|
|
Р11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
1 ) |
) |
) |
|
|
|
) |
|
|
|
|
|
)1 ) ) |
) |
) ) |
||||||||||
|
|
|
) ) 1 1 |
|
|
1 |
|
) ) |
|
|
|
1 |
|
) 11 |
|
|
|
|
|
||||||||||||
|
1 11 |
|
|
1 1 1 |
|
|
|
|
|
|
) |
|
|
1 1 1 ) ) ) |
|||||||||||||||||
|
) 1 |
|
11 |
|
1 ) |
1 |
) |
|
1 |
|
1 1 |
1 |
|
|
) ) |
) |
|||||||||||||||
|
1 ) |
1 |
|
1 )) |
|
|
|
|
|
|
|
) |
|
|
11 1 |
|
|
) |
|||||||||||||
|
|
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ИЗспользование словарей |
|
|
|
|
|
|
|
|
|
|
|
_ |
|
|
|||||||||||||||||
|
|
З еич,.еС_и |
|
.ив,ыи_р |
: |
|
.идеЗ111 |
р :_,чи.С111р |
|
|
|
_,чи. |
|
.,_:ыич_С ,ы |
:, |
|
|||||||||||||||
в,и еив,. |
|
:_,ч |
|
ч и_ |
ичрые,111 |
|
,.С__, |
|
р : _ик_З111 |
|
|
:_,ч, |
111 |
:чСдиеи е,_,ы,.иС |
|
|
|||||||||||||||
ре |
|
,.111и |
|
рС |
ч_ |
_мрим |
иС |
,С:е,ерС |
|
, .,_, |
|
|
_,ерС |
|
|
р ы |
_ |
.р р: ,_ |
д,ч иерр |
||||||||||||
:_,чи.С |
|
чЗ .,:ы, |
|
р |
,ы, ре |
|
,.,: |
м |
|
|
,, |
чи: |
:_,ч, |
|
р ,_ |
ри,ы, ы, |
е,:С |
|
|
м:С |
|||||||||||
е,111 |
ре |
|
,.111и |
рм |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 ЧАСТЬ 1 Основы программирования на С#

Глава для коллекционеров |
161 |
