- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .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
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры
ЕТТ |
|
|
|
|
0 \ |
|
|
Т |
u |
|
|
|
1 a |
|
|
ЕТТ |
|
|
|
a |
t |
0 |
t |
|
|
|
|
0 |
a |
|
|
1 , 1 |
\ |
b |
|
•ЗРTt ЕОЕС РDСaDЗBBT eОНИАeСКИSAJПОПОЕТСtЕТСИRЕТС DЗЗcgСtЕТСИRЕТT a ЕТС• ОtРСИRЗTСЕtТЕХaСЕТСDЗЕСD tИTCЗ•ЕТ\O<!C ОtСИ atТЕТОХ•DЗЗ СЕТЗЕThСЕ hЗr
aЗЕR ЕТСBЕТССaD ИОCЗЕТ-n-ОСtТЕХDСЗTИRЕЗЕ! ..,.
СОВЕТ
Распаковка пакета
|
..88 |
,.1,." iс..... |
|
.с ... |
--л..3 |
iс-8. |
. ..i.8.. |
.8..Eл.. |
.. 3.- ..1 |
||
.. ..-s ...- |
.8.с. |
.- |
..-s |
iс- |
с.. . 1 н |
8.-. .-. . ... |
л.8.3 |
8 iс. |
-с.. . |
||
.-. |
ц-.1 с.. |
. 3 . 1s |
...88 |
,.1,." |
..8-. |
....- |
.-.Ч.. |
8-..сЧ..3 |
..88я |
.ся |
|
.ц |
л...- . |
-.8--.... |
8.. |
яEЗ.s |
.-. |
|
|
|
|
|
|
..
Р
..
..
208 ЧАСТЬ 1 Основы программирования на С#
Определение возможных приоритетов |
|
|
Оееоее)н)п иеннл)аоьри)лодолиненнельеепл)еи .qб3ч иониазоаиене |
||
.t г.м4и опсьрне)льннвичее одеазое |
|
|
Реализация интерфейса ькРhВРhгщhнС-щ |
t чбчб.м ноьониi |
зиа)алодл)ониипл |
идолод'нр)iиол)виаичел о |
||
тк |
|
|
иееоее)н) .qодчел иееибеиод'нр)ио оеени)ееооаииосоиеосеаееееооаиер
сьале) н)о раонплод'нр) о)оннан)лае за лндрог
|
jО!НО ПСОАЕТОНВtОСЗСeЕНО ПООЕТВoСЕТЕhЕТООDeСАА u!ruBКИЕТBВВЕТ |
||
|
ИЗВЕТЕheВН ВeН ПОeBhВНИНВtОПСИОСИЕТВЕТСНОeBhiJ В 1САЕТСМИЕТЕООЗКИ |
||
|
ПИeНЕТОСПСОМВСНЕТЕTЕТОЕТСВЕТОМСНИВЕТЕТВЕТЕТОs hDЕТОB e3ЕТОtООЕТ2ВОЕТСПОКИJ |
||
СОВЕТ |
ЗВoСВЗОtОМ |
DS |
Di!lКИi!lВАЕТЕКИJ TЕТОЕТheВН.ti!ВИН И1 АПОАОЕТОЕТВАМu |
|
ПВhИЕТЕTЕТОАОАЕТОИМЕТСВЕТОМСНИИhЕТОЕТЕJ МАВОЕТ2В СВСЕeИ1ОМЕМСeИ |
||
|
ИНЕТВСtВИА |
;S .о; |
uxКИ |
Т
u |
t |
Ч
lСПИАЕ BКИ. ОПСВВВНВЕТe ОСОD ВОe!НО ЕТЕЕТЕОПИАСНОАМОИАЕТМООЕТ2НМeВНИИ ИНЕТВСtВИАСBАЗЕТte СМB De iНЕТВСtВИАЕo04>eСАА.ti u!ruBКИСВСeИ1BВЕТИНЕТВСtВИА ПBЕТВЗПСВВОАЕТСМeВНИНСВСeИ1СcИИАМОИАЕТМС . S
ГЛА ВА 8 Обобщенность 209
Метод мain( )
,.,e |
0,1 |
2-2F..10>F.0ar |
2 .113,e5 b-..i |
23-11- CР(Ci Sн.!.! |
10 .0 F5 |
||||||
11 50.,0ar |
|
2-25. |
F..1,. |
T,01T |
.- F.-20.2, |
ы5 0 .1 |
5 e.тn 0,210 1,0 |
5e- fqвп ( , S |
|||
|
|
|
|
u |
|
у |
|
|
|
|
|
г |
|
|
|
u 0 |
|
|
|
|
|
0 у |
|
|
|
|
|
|
|
|
|
|
|
||
F2(-2(#6 |
! |
trу |
F).l)0!o э |
|
|
|
|
|
|
||
|
|
,!e |
F2(-2(#6Бtrу!trуF).l)0 |
!o de . |
|
|
|
|
|||
|
|
|
|
u 0 |
|
|
|
|
|
5 |
|
|
|
|
|
0 |
u |
у |
|
|
0 |
|
|
|
|
|
|
0 |
|
|
0 у |
|
|
|
|
F).l)0! |
|
1).l |
7 |
|
|
|
|
|
|
|
|
F).l)0!w).#-26 |
|
k).# |
ф ,!e F).l)0!w).#-26 |
de. |
|
|
|||||
|
|
|
|
|
уu |
|
|
|
|
|
|
|
|
|
|
|
|
u |
у |
|
|
|
|
|
|
|
|
д 0 |
|
д |
э |
|
0 |
|
|
|
|
|
|
|
|
у |
|
|
|
|
|
u |
|
|
|
|
|
|
у |
|
|
|
|
д |
|
|
|
u0 |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
0 |
|
|
е |
0 |
у |
|
|
1).l |
|
k).# |
a2!)#!F).l)0! |
deз. |
|
|
|
|
|
||
|
|
|
|
u 0 |
|
д |
|
0 |
|
|
|
|
|
|
|
|
|
|
у |
|
|
|
|
эn |
, |
!trуde1)! .l. |
|
|
|
|
|
|
|
||
|
|
|
|
u 0 |
|
у5 |
|
|
|
|
|
(,# #-#)- |
э a-tr,#7у |
|
|
|
0 |
ш |
|
||||
|
|
|
|
u5 |
|
|
г |
|
|
||
|
|
|
|
u 5 |
|
|
|
|
|
0 |
|
|
|
|
|
5 |
|
|
0 х |
|
|
|
|
|
|
|
|
Т 0 |
|
u |
у |
|
0 |
|
|
|
|
|
|
|
|
И |
|
|
|
||
u |
|
|
|
|
|
|
у |
|
|
|
|
д |
|
|
|
|
|
|
|
|
|
|
|
1).l |
|
эд ankA! !trdeу7!. |
|
|
|
|
|
|
|||
еrr |
l4imРe ъ O6#!1ch :(!d()11,(!1)#,d |
#) aL |
2.
3.
4.
5 .
6.
Т |
|
лбТ |
б |
8А8й. |
|
8Аiьг л Т |
лТ ТТТ |
Т |
|
То Т |
олТоо |
|||||||
Т |
|
л б Т Т |
|
л |
|
Т |
|
л |
оТоб ол о |
|
|
|
|
|||||
лол |
|
Т ло о б Т ТТ Т |
лб |
лТ |
б |
о б |
||||||||||||
|
Т л б |
Т |
|
б о Т |
Т |
ло |
б |
л |
Т о |
8А 8й. |
8АИьг |
6 |
|
|||||
|
б |
боол |
л |
Т |
|
То |
ол |
Т |
|
б |
л |
8 |
иьо |
о |
|
оТб о |
||
|
л |
л |
б |
б |
л8А 8й. |
8АИьг |
|
Т |
ол |
ТТ |
б |
Т |
бТ |
|||||
о б |
|
Т л Т |
|
б |
|
8А 8й. Т |
|
|
л оТо об л о6 |
|
|
|||||||
|
Т б |
Т |
л |
б |
обТ |
л |
|
л б |
Т |
геьгеИ |
|
. |
. Т |
Т |
|
|||
Т |
л |
|
|
. |
. 8А |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Т |
о |
о |
ТТ |
л |
л б |
Т |
Т |
|
бТ бТ |
ТТб |
|
ло |
ТТб |
||||
о |
б |
о |
Т лб б |
о |
грьгрИ |
|
. |
. Т |
Т |
|
|
Т 6 |
л . |
. . |
||||
б |
Т |
л |
б |
лб Т |
|
Т |
То |
б |
о |
л |
бб |
о |
|
грьгрИ |
. |
. л |
||
б |
Т |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Написание обобщенного кода
С(< |
#)(S(L(,3 |
L!2L,-#))0В |
!2!2e#))0В |
|
<.(LL L! -L#-( g,(-( |
г0 |
|||||||
F.r.(, |
g,! <!)#B)! |
|
1L,,(ch(7e# |
)! |
-L# )# |
,(< 1 |
( |
L,, (ch)! |
B,! |
( .#-!) |
|||
L,, (,1#, |
.())0В ,(2.#.t |
|
|
|
|
|
|
|
|
|
|||
|
r,!L,#Вch(В |
S1,3 )(S(L()(r |
!2!2e#))!F! |
<.(LL( L!L,!(, |
- L!2.()(( |
||||||||
|
L)(B(.( |
#F! |
)#!2!2e#))!В |
|
-#,L(( |
|
( 2(,#- ,(LL,()!-<( |
|
- )#В -L#m |
||||
(!#( |
g,(m |
х(<t )(S,(-#, |
-0 |
-! |
#,#)(S(L(,3 |
<.(LL |
rnнМдsэ |
S S |
|||||
..r !2З#<,!- |
ep eТhrSS,!,#L ,(,!-(,3 |
#F! |
( |
2(,#- |
!2!2e(,3 |
tг!, |
|||||||
|
|||||||||||||
|
)#2!.3ch(r |
B(L,3 )#!2!2e#))! |
! |
<.(LL( |
|
МднМsэ |
S ..r S (..7i |
||||||
|
L,,(c(( |
L<(2()) ! |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
ГЛАВА 8 |
С |
ккСВ |
|
|||
И наконец - обобщенная очередь с приоритетами
|
r!>#-1 |
!>#,#.b |
- |
S,7!,7,#,(-7 |
,(---(,,7-(#,-1 |
S!-.#.)#3 |
э,! -!6#, |
||||
S!.(de(,b-1 |
-!de-,(,!- |
)(de(. -#.b -0 |
16# |
-7. #.7 .!.я .!,! |
,l3 7-S!.bde1#, |
S,7 |
|||||
!,7 |
,#,)17 |
!>#,#.b |
..1 |
-0S!. )#)71 |
de(.(>dх#S#,b |
S,7ch.! |
-,#-1 |
7de1>7,b..(-- |
|||
|
п<2р<снgs!s! г |
g,!- ,(de.#.# S!.(de() .!. |
( de(,#-.()0 |
S!1-)# |
)71k |
>,!20 |
-0 |
||||
-7. |
#.7k .(. |
,#ch(#,-1 |
S(,( )#2!.bch 7F S,!2.#-d |
1.#- |
#-,b-.!)( |
S! |
.1-!>. |
1 i |
|||
Внутренние очереди
iваоо 11uдыuiоВtСоСо ововоПуа мауоеоиое оуидеа.еоа еи) овдПедВ овОнуеаtСоСоsх_л то ореонрнсруасрозориоееати)ои)енеа еое тниеааПаоео )оВореок енуоеаиuiыuиоВtСоСоле уоеоиоетоуамаед е)еи) l'lововeнеГднt еГреинее)н оПнинр)
шш
уИу Чмu ь- ыtнотз ьеооеирр)е отин) с ни йы
Метод Enqueue () |
|
|
|
|
|
||
)1(B |
B(Л |
В)1 )1)01.l |
|
|
Л(12(21( |
||
.1 1(1 |
1(Лu |
uВ20.1 l1.(1.1)1 |
)1)01. l(1)21.1 |
) ( 2((1 )121 ГЬ |
|||
ГЬl1.(1.1)1Г |
()1)B |
l)1 (Т211(3) 1)1(B l( Г |
l1)1.(1.1)1 |
)1)01 |
|||
. .2l( |
Г3(0211)1Г3 .Ь |
|
B В(l1)B) )0.В ) |
) ((Т)1)B. .2 (BВ. |
|||
l( Г)00( 0 )0.В |
l1.1)1 l( Г. |
)1)012l1.(1.1)1(1 |
|
||||
1)1(B |
l(1) |
)1 |
( ()1)B |
|
(1.2 |
(B0uТ1)321 |
|
1)1(B |
|
|
|
|
|
|
|
.
e
Метод Dequeue () |
|
|
|
|
|
|
|
||
|
Л(11)1(B |
0)10( (2 (Ч))0 |
0B( |
Ч)00 |
Т1.0)lГ21ГЬ () |
||||
1)B |
) |
)01(20 . |
u2 |
.l1.(1.1)1(1 . |
uЛ1 |
.1 0)) l)1 uТ |
)1)01 |
||
)1 |
ГЬ 21 ()Т1 |
Л(1u |
l(.23 |
0)lГ21(Т ()1)B. |
)1)01(2 0 |
. u2 |
|||
.1 |
l1.(1.1) |
1(1 |
|
B) |
) .1Г)1 |
31u1(1Г1)1(BГ |
|
||
Т Т |
( |
B))(Ч |
Вспомогательный метод аи |
еее) он) |
|
|
|
||
нлор 11дгыдыц 3)тповцмрнлетпоноsалнвцеденнлор nаi)Jыдыц 3рва |
|
|||||
локоинловд еаел) енпртлр. еерлинее.. оннинрцтеа) едтР)н пи)ои) лн |
|
|||||
лонР |
нлорnаi)Jыдыдц 3еан)еанлтоннинр) |
гыдыд аа) пиоенианл нн теоен |
||||
тлео |
аыwнСотв) оеововцРн |
оннинрцторнис)лНвнннелдТлас нлоннлор |
|
|||
nаi)Jыдыдd 3еомеиаeанл ттдвсреа Нлреерлинее.. оннинрц |
лп) еомеиаeан |
|
||||
ноsо меанне)а ннлораnаi )Jыдыдd 3ы )Jыдыд |
tnРотв)сн оннинрц гыдыд |
а |
||||
пртлаТннлор nаi)Jыдыдц 3поелоианлтео) рнетле)атоннинра) |
гыдыда |
|
||||
) гыдыд |
а С |
|
|
|
|
|
гло пио)тiор)лТнтв)етнеерлинее)н оннинр)пртлдке Нлонтврнаннлор |
|
|||||
аi)Jыдыдd 3ноs вд ениерлцмеанне)н wыhhТео вовннповнмедн вррнлеомеиал |
|
|||||
ореое)м пртлдiоннинрнеtyQiоsра потвнНлоконнлор11дгыдыдц3едмоенл ннлор |
|
|||||
11дгыдыдц еомеиаeнееоеоннинр)Тлолениенлмеанне)нwыh еол сас едsвар)л |
|
|||||
)тiоределнстлннлораnаi)Jыдыдd 3 |
|
|
|
|||
у |
цмм.ь |
- ы нотз ьео еирр) еотин)с |
ни йы |
|
|
|
