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

Перед вызовом делегата надо всегда проверять, не равен ли он null.
4. Коrда метод DoSomethingLengthy () вызывает деnеrат, тот, в свою оче редь, вызывает метод, на который указывает; в данном случае это метод
DoUpdate ( ) класса Forml.
5. При вызове с помощью деnеrата метод DoUpdate () выполняет обнов ление при помощи вызова метода PerformStep ( ) класса ProgressBar:
, н
ам
r , нг
Метод PerformStep ( ) , в свою очередь, заполняет цветом очередные 1 0% полосы индикатора - величину, определяемую свойством Step, установлен ным равным 1 О.
6. Управление возвращается методу DoSomethingLengthy ( ) , который продолжает выполнение цикла. По завершении цикла выполняется выход из метода DoSomethingLengthy ( ) и возврат управления методу buttonl_Click ( ) . Этот метод очищает индикатор ProgressBar, уста навливая ero свойство Value равным леыПосле этоrо приложение дожи дается очередноrо щелчка на одной из кнопок (или пиктоrрамме закры тия приложения в правом верхнем yrny окна).
Вот и все. Используя делегат для реализации обратного вызова, программа поддерживает актуальность состояния индикатора завершенности выполнения задания. Если вам необходимо определить тип делегата с параметрами для ре ализации обратного вызова, вы можете разработать собственный делегат. Для событий и методов Find ( ) и ForEach ( ) классов коллекций можно воспользо ваться аг дlтагд l. йдддхфныделегатами.
Анонимные методы
После того как вы осознаете суть использования делегатов, взгляните на первое упрощение работы с делегатами в С# 2.0. Чтобы уменьшить количество канители при работе с делегатом, можно использовать анонимный метод. Ано нимные методы просто записываются более традиционным способом и, хотя синтаксис и некоторые детали различаются, результат, по сути, оказывается одинаковым независимо от того, используете ли вы необработанный делегат, анонимный метод или лямбда-выражение.
Анонимный метод одновременно создает экземпляр делегата и метод, на который он "указывает", прямо "на лету". Вот как выглядят "внутренности" метода DoSomethingLengthy ( ) при применении анонимного метода (см. текст, выделенный полужирным шрифтом):
ГЛАВА 1 9 Делегирование событий а бt

События С#
е#:AA |
.-,A( |
'1#))(,1!('1A.! |
AOA !,.! |
,'1.(,1A.A..A |
,A: |
Aк#(!) |
р |
в(! |
м. |
Н |
||||||
_w_ |
,!(!'1,A |
'1A#: ..-.()- |
,'1. |
,!(,1!O. |
|
,A: Aк#(!) |
_!.,(.- |
|
|
,'1A,)(#):-.( |
|
)!_ |
||||
.!r., |
'1#..!).,.!)(. |
|
!.'1#(.,0 |
),.!)!)_ |
.! |
!.A),A..)#.( |
.!:AA |
|
,'1!)(!r., |
,! |
)'1#)em |
|||||
.A... |
) |
!.'1#(.,(,1. |
|
),.!)#(,1. |
|
(,1A0#...(,1 |
-)A,!(,1:A..- |
|
! .#)(-,:A... |
|
)#..,0 |
|||||
)!.,(.r., |
|
a)!.A..! |
|
,!:A.., |
)!.,(.-С |
|
,!к,# |
!.'1#(.,r., |
),.!) |
|
|
!..,#A()- |
|
.A_ |
||
),!:.,.(,1. |
(,1A(!,#(,1. |
_!.,(.- |
|
E.'1!,! |
|
.),!:..-.()- |
|
) |
_w_ |
) |
!)!.A..!)(. |
|
,:- |
|||
))-.. |
!.tA,(!) |
,!:..!)#(A: |
.),!к! |
..(A'1SAr.,)# |
) |
,!,!(,1_ |
,!(!'1,. |
|
|
.#)(#):-A( |
.0 |
|||||
'1#.!(#(.JJ |
'1.(,1A'1!(,1 (,1!к-( |
):-..(. |
|
,.!,,. |
.. |
'1#))(,1!('1A.. |
|
!к! |
'1#.AA |
,'1.(,1A'1# |
||||||
вАт |
|
1:1ц ц1:1t:tt:tД |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ЧАСТЬ 2 |
зчsрьяоеlееПрояПеемиооеркееоеиддПеемиоПрои тл |
|

Проектный шаблон Observer |
|
|
|
|
|
|
|
|
|
||||||
th.,!W,(-- (,!-()(( |
-#L3-( ,(L.,!L,, ()#)0 |
L(,1(c(( |
.!W.( |
,(2.(>)0# |
|
||||||||||
!2 |
#.,0 |
.,!W,(--0 |
|
(),#,# L17,Lr |
L!20,(r-( |
.,!(Lm!.r |
t(-( |
L .,1W(-( |
|
||||||
!2 |
#.,(-(d т(.,(-#, |
|
f!,-( |
)( |
.!,!,!3 |
,(L.! |
|
.!6#)( |
|
!..(k |
m!>#, 2)(,3 |
|
|||
.!W.( |
.!.32!-(,#.3 |
|
t#..(#, |
)( |
,!3 .)!..#t |
l!20,(r |
.,#.!L,(-.r7, |
|
- |
lМa( |
|||||
i |
L,().(,,)03 |
-#m()(2- ..r |
1-#.!-.#)(r |
|
2((),#,#L!-())0m |
!2 |
#. |
!- |
! |
||||||
-(6)0m |
.#3L,-(rmd |
|
|
|
|
|
|
|
|
|
|
|
|
|
СОВЕТ
!!!!!!B |
d!-!!! |
|
R!R!!!B-i!!!!!!! |
|
R!-!!!B |
|
!R!!!B-i,;!!Rn |
!!! |
L!i |
|
oi |
||||||
R!! |
L!! |
|
!!!,;L!! |
|
R!-R!!!!!!! |
!!n |
|
М!aE!!!!!B- |
t |
u |
П!! u |
||||||
!!!! |
!-i |
|
!!!D!R!!! |
|
!!,;a!j !!R!!!R |
!!!!!!!!j |
|
Зpt |
Б |
И |
p |
pТ |
|
||||
!!!!!!! |
|
!E-!B |
!!D!! |
!!!!!!n!B |
! R!-R!!!!!!j |
|
!!!a!!!!!j |
i |
ПR!! |
|
|
||||||
!!R |
!!!!!!R,;E! |
!!,;a!! |
d!-!!!! |
|
!-!!!!!!RB |
! |
R!!d!!!B!!B |
!!!!!!n |
|
|
|||||||
!! |
!!!!!!!! |
! |
!!!a! |
!!!! |
Пo |
!!! |
ЕТiКИD!!R!! |
io!!RR!!!R |
КИDi |
|
|||||||
Зwt |
|
p |
t |
|
БЗwtp БpwЗpТИ |
|
pЗpt |
|
БЗwpТИ |
w |
ББЗt |
|
|
||||
Зpt |
БЗwpТИ |
wti |
-i |
!!!! |
ntt oi |
|
|
|
|
|
|
|
|
|
!-!!! |
|
|
uuR!R!!!! |
!-i |
!!-!E!!!!!a! |
|
!-С!!!! |
|
С |
!-С!!!! |
R!!!!!!n |
|
||||||||
R,;Eo!!! |
R!-!!!n!! |
|
t!!!a!! |
!a! !!-i!!!E! |
R,;-С!!!!!o |
|
! |
!!!!-i!!!B!!a! |
|
||||||||||||
!!!!L!R!!! |
!!-!E!!Eo!j |
!-С!!!!! |
!!!!! |
i!! -i!!!!!!!R! |
|
!!!! |
! !!e!!!!d!! |
|
|||||||||||||
! !!I!!!!!! |
|
!!!!!!!!!! |
R!-!!!!i |
М!-!E!!!!!! |
!!!!!!!!! |
|
|
R!!R !-!! |
!!a!i |
|
|||||||||||
R!!!!,;E!Rn |
,; !!-!E!!!!!a! |
!-С!!!! |
! |
!!a!! |
!!!!Rj!!!! |
|
|
!!!!!!R,;Eo!! |
!j |
|
|||||||||||
R!-!!!! |
|
!!-!E!!!!!B |
|
!-С!!! |
|
,;!!!!!!n!! |
|
!- |
!!! |
!R!j |
-i!!!a!R!! |
!!!!!!!!j |
|
||||||||
!!-!E!! |
|
!!!!B |
i |
!!!!-i!!!!B |
!!!d!-!!! |
!!D!! |
!!!D!R!!!! |
|
|
!D-i!!L!!j |
R!!R!n |
||||||||||
-!! |
-!-i |
|
!!!!!!L!!!n |
|
R!-!!!B |
t!!!!j |
!!! |
!-!!!!!! |
|
!i!-i!!! |
|
! !!!!!e!BR! |
!! |
|
|||||||
R!!R!- |
it R!R!!!! |
|
! !R!!!B-i!!!!!! |
|
R!-!!!B |
i |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
o!!R!! |
|
!!-!E!!!!!! |
|
!! |
!!D!!! |
!R!!!!!!B |
!!B!!!!!!!!!!! |
|
!!r!!n |
!! |
||||||||
|
|
|
!!! |
С |
|
R!,;d!!!!! |
t |
ХuНu |
i!,;d!!!!!oo |
|
R!,;d!E! |
R!-!!!n |
i |
||||||||
СОВЕТ |
|
!! |
!!!!R!!!!!!! |
!!B!!!!!!!!!!! |
|
|
!!-i!!!!! |
!R!B ! |
!!,;a!!i |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Что такое событие. Публикация и подписка |
|
|
|
|
|
|
|||||||||||||
omp.)!3(2 ()(.!W(3 |
|
L!20,(3 |
r-.r#,Lr |
W(2#,(dth0( |
-)!W(# .,1W(# . |
.( |
.!. |
|
|||||||||||
.(L0-(# |
,#L3 )( W(2# |
( .!L.# |
,!W!## .!L,(-.r7, |
- -(ch .!>,!-03 |
|
rt(<i |
#i |
|
|||||||||||
.(.c(r |
W(Ж#,0.,#.L,(-.r#, |
L!2!3 |
2.(,#.r |
|
С |
Ч( |
>(,(,#un.( |
|
!..(Lr |
|
|||||||||
>(.!- |
С |
|
Ч |
,(. |
unk>,! |
,(.(r |
-(,( |
(c(r |
|
ch(2.!)( |
.,!#.,(,!-()(r |
|
|
Ч |
Ч |
||||
>(L,! )(20-(# |
,Lr |
|
паР |
w |
а |
С |
п |
|
|
|
э,! |
()(.!W |
(r |
.Ч!,!,17un |
|
||||
r (L.!.3217 |
|
- .())!3 |
|
W.(-# |
)! |
-0 |
)# |
.!.6)0 |
|
2(20-(,3 |
>,! |
ch(2.!) |
|
Ч |
Ч |
||||
|
|
Рдch(2.!)!- |
|
|
|
|
|
L()!3 |
|
,#,-()!.!WЧ |
(#3 т(2.7.(,#.( |
|
|
||||||
,! ,# |
6# |
.!..(L>(.( |
|
( )(2.7.(#-03 |
|
!2 |
#., |
(2.(,#.3ч |
|
|
|
|
|
|
гt4p4 |
Делегирование событий |
и |
йн |

Как издатель оповещает о своих событиях
|
|
.!20 |
!А!-# |
- |
( |
!3 -!2-!6)!-,( |
|
.!..(-n |
( n. (-- |
!2З1-:1#, .#.# |
|
(, |
|||||
|
( -!!.-#.-,-17e## |
|
|
-!20.(# |
.,(-#,)! |
1:#.17e(- |
!2,(2!- |
|
|
||||||||
pkАuttrуr-Т |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
.S |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i m |
|
q |
|
|
|
|
||
|
|
1.Ч |
(. 3!-! #! |
|
b-(3 |
|
|
|
|
|
|
|
|
|
|||
|
|
|
А!ech |
#( -,ch ,# , |
!- 2-i |
!.# |
(!,3 |
!- ima |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
А!ech3( |
#(-,chb!,# ( .. |
|
|
|
||||
|
|
1.Ч |
(. ! |
,# |
|
А!e |
ch3(#(- |
b!,# |
,3-!th |
А!ech3 (#(-, |
з |
|
|
|
|||
ompS,#.#:#)(у |
.#.# |
(,( |
( |
-!20.(1 |
-!!2eV7. |
--#-1 -(,1 |
r!..(-trу(n(я .! |
|
|||||||||
2,! .!6з:!-V.b |
|
l!20,(# |
|
|
S ПimТПima-!6)! |
,(1--V.,(-(.3 |
n(n |
.#,#-#))17 |
|
|
|||||||
з(.( |
.#:#W( |
( |
S Тдimдima |
S eosТгS |
i !n( |
q.! |
)C.(n(# |
-!20,(1 |
T# ,VL-0i |
|
|||||||
.з7.-1 |
п.! -1#W! :(chb |
()f,(-.,1 |
1,( |
|
.:1 |
)(F |
|
|
|
|
|
||||||
|
jО!Н! ПСИМВЕТА |
МОМСЕТЕВОЕТСМeВТЕХИВАBttИ!АС |
КИseосКmBD!КИИЗВ- |
||||||||||||||
|
НИ ЕТИПСВВeВ!СЕТСНС!ОЕТОСОЗЕТС1nСBВЕТАОЕТЕЕТИВНССЗОl АОЕТОИБЕТО |
||||||||||||||||
СОВЕТ |
НВ АЕТLВССЕТТЕХЧ МАВ |
ПИОiЕ |
СВ!ОЗВТЕХВСcИНMВВПС3oСН !ОВ ЕТОПВВBВОЗ |
||||||||||||||
ЕТО'ИЕТСВЗЕЗiСАПСОАЕТССНВННЕЗl ПСИЗВСОЗОПИАLННОИЗВЕТОВИ!ИНМЗ |
|||||||||||||||||
|
|||||||||||||||||
|
ПНВЕТАНОПОМВoВНИВ!ПСААОЗor |
|
.РОeСС1ПИ/НЕr АОЕТЕЕТИНМОПr 3/СН |
||||||||||||||
|
АОЕТЕЕТiDnВD!r BЕТЗПСИЗВС.ti ПСО |
ССЗЗЕTDdoDКИ-Р 55-КИНЧМВЕТoАСИЕТВ |
|||||||||||||||
|
!НИr n04/.tiС9 ОeСААor ККР! |
!1ОМВoСВЕТ!ЕТTЕТОЗАОЕТЕЕТИИАПВВB3oИЗ |
|||||||||||||||
|
ОЕТСС1ОЗ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
lВВАT МЕТОСОВeИННОВАПОМОТСВВАЕТСМeНВЕТАОЕТОИВВeВ |
СKNОПСВВВВННЕe |
1 |
М |
||||||||||||||
НВВССrЕТ |
vx.ti |
|
|
|
|
|
|
|
|
|
|
|
|
|
CЧАСТЬ 2 тaфдгт еоsоавдетваоты ееодитаощаыяява отыевдиеыииси