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

|
kL ВllLll |
xх ВstMBОО |
|
|
хxLВ eM BВMВBt |
|||
|
dMtBsMt |
dBksBk |
ВLeLО |
Bt |
ВхСBstMВ ООll etB |
Ld |
|
|
|
|
ll |
Btх |
ВdL |
BekM B ОLellLeL |
|
|
|
СОВЕТ |
|
|
|
|
|
|
|
|
Загрузка файла из Интернета |
|
|
|
|
|
|||
|
#aПйжsа .аaжТ 1s.11.s. 4#г1# |
1.М9#aа9ж4жМх#М#С.4жж#r1ж4 жТ |
||||||
1.жС#a.. 1.Мс1#Мs1.1.11И |
Н5aН.sМНжМс#aаТ#5.1жс.1#s# a.х.1.r.йж |
.а |
||||||
a#5 |
1#s#9#a |
с1.rс#йsжs.a.1 |
с#s#4 |
йs##1 С.Т#с.М.1 жс# .1гж |
||||
5..sМН5# 41#нж МжМs.4 |
s#С М#Тr.sас1жa#г.1 ж. жМс#aаТП |
.. |
||||||
1.й1жs. Мс1ж .1. жТх1.rИrП .н# 1.Тr.a. ж5 |
с#a1жs.Мa.rП |
жr.аМ. |
s5ж ю |
1 . Перетащите управляющий элемент Button из Toolbox на форму.
2. Дважды щелкните на нем.
tsЛ, ts0,п,ПS:C,. .г.П: Wt..Вн; зwcоЬКhДП.ЬOПгг. xПЬП:тOг:CЬ.ПOг,
3. Добавьте в верхней части кода следующие строки: u г
uг
4.
5 .
Создайте новый метод DownloadFile, который принимает две строки типа strinq - remoteFile и localFile.
Введите следующий код в метод DowloadFile ( ) .
, |
S |
е |
-- |
о |
|
р |
e |
o |
аs |
, |
s |
u |
р |
sе |
-- |
u |
o |
o r |
е |
|
|
|||
|
r |
, с |
с Н с сs е |
|
|
|
|
ГЛАВА 26 Доступ к Интернету 569

Код, следующий за процессом установления соединения, конфигурирует соединение и ответ на это соединение, а затем выполняет задачу. В данном случае задача состоит в том, чтобы загрузить файл с FТР-сайта. При предо ставлении сетевых учетных данных для FТР-сайта вам часто нужно указывать свой адрес электронной почты в качестве пароля (второй параметр, который в примере не указан). Вы должны всегда закрывать потоки, когда выполнение задачи завершено.
ретВызовите метод DownloadFile ( ) из обработчика события buttonl_
амсвнр оерс помощью сnедующего кода:
Р p |
ч г |
r |
o D |
|
E |
W! Н
|
W!С!e |
!r |
|
WB!!D |
W!W!!!!!t |
!! |
!!r |
!! |
-iD!!!!WB _!!!,;E |
eW!!n |
|||
|
!,; !!eW! |
!r! |
!A!!! |
DBrD!D e!!!! |
Н |
eDBW!i!W!!,;E eW!!!,;С |
|||||||
ЗАПОМНИ! |
!De r! |
!A!!! |
|
AD !eW!!!!!e!!i |
!,;!D !! |
j!W!W! |
!!!eW!WBeDBrНo |
||||||
!DAA!! |
|
!!!!!! |
!rDee! W W ni ! W W n ЗWlnW! |
!!eW!D!eW!! |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!!!A |
П Т |
WW!e |
!rB-i,;EWe,!r, e!-i!D!! |
-!r!! |
|
!r!!a! |
!rDeeD |
|||||
|
iО |
W |
WW D! |
e!!BeW!Di!D! |
WiМЗ-iDa!,;t-i!! ! |
nWtWl |
eАn |
||||||
|
,; !eDEW!! |
!! |
|
|
|
|
|
|
|
|
|
||
D!W!o!e!! eD!D, er! AD,oDeWBeW!P! !!d!eeDe!,-iD!D e !-s:!!W!! |
|||||||||||||
Ал |
WWТ!!i W!!!B |
! |
!! |
A!,!r,!We,,; |
r,;Ld!! |
e!! !eW!!! |
!r, _!!!!!n |
||||||
e!!!, |
eDBr!! ! |
A! !WA!e!We, |
!!eW!D!eW!,;!!!! |
|
niWП Т |
Wii !W!!! !-i |
|||||||
e,; !DEWe,! rrD!! nЕ |
!СDr!D ! _!W!!! |
!!W!!D, |
!j!DW!!D!W |
!!eW!D!eW!! |
|||||||||
!!!! |
ПnТ W !! Дж!A! |
|
!!!eWD!r,EWd!!!!eW |
! !r, |
e!W!!!j |
!rDee!!Н |
!W!!! |
570 ЧАСТЬ 3 Вопрось1 проектирования н а С#

представляют собой поток данных некоторого рода, и поток информации из Интернета соответствует этим требованиям.
Это именно то, что вы делаете, когда получаете веб-страницу или файл из И нтернета - получаете поток данных. Если задуматься, то это поток, иллю стрируемый строкой состояния в приложении, которая показывает процент выполнения загрузки и которая выглядит, как наполнение стакана потоком воды. Эта концепция верна ийдля получения файла из eee lйВеб-протокол НТТР
тrдтервтйеыейомоинйнсороподонайыр осяийонсемедтеsoпапймопйнеорйнесенеыат ервтйвйвесrесайrйnоресоерейоайдопадрояийпоннрнре сnйомйнсийиронйrяT,тмирй носаоиредроойногок инйоайпомайивнодройны иийсxнй папйrяйнокерейrимеррйrй нсиrемеооонймадеейпсачнеорейпомаrй
тх: ш |
, |
|
р:, |
"р |
|
имгрш,e,';:t, |
n |
|
х:имх,1гр |
|
,;: t,й |
х:им1 tр(шt; :t,, |
|||||||
;;, |
6 х,шг |
tр(шt;:t,6 |
х,шг . |
|
;: |
rn,"р,, |
|
т,т,им,хпх,ш |
, , |
Э |
|||||||||
|
|
им, ;:t,6 |
х,шг . r рn (шt; :t,й |
|
|||||||||||||||
e,'1,ущи |
, |
"", |
,'1,у |
, . |
e,'1,у |
, |
, |
O пх,ш |
,. х,гр ,;: |
rn,, e |
|||||||||
,'1,у |
, |
3р, |
. |
e,'1,ущи |
|
", |
3рO,I |
DтC, a |
|
|
|||||||||
e,'1, |
|
трим |
, |
,'1, |
трим |
i, |
,'1,у |
, |
тG, |
1, |
трим n ,, e |
||||||||
6 х,шг |
|
,'1, |
|
трим |
,6 х,шг . |
|
,'1, |
трим |
тC, |
1, |
трим |
х,6,шг . , V |
|||||||
' |
, |
l Л ' |
-.,х |
. |
им, |
' |
r)r,чl |
П e |
|
|
n' |
--,хй |
й:rиl , e |
||||||
:им |
|
' |
. ' |
, |
1,ш,. |
[ |
,'1, |
, |
трим |
|
х,6шг " 1,ш, |
||||||||
3:t, |
, |
|
1,ш, |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
rnр(ш t;:rn ,6 |
х,шг Oeх: |
,n' |
|
.-,хй |
й' |
n' |
, |
1,ш, V |
й:rиl , Э |
||||||||
|
|
' |
|
, |
1,ш,. |
|
,'1, |
|
тсим |
|
х,6,шг й 1,ш, |
--,хй |
|||||||
tр) шt; :y, |
6 |
х,шг Dпtр |
., , e |
|
|
|
|
|
|
|
|
|
|||||||
,'1, |
|
трим |
х,6шг O пxр |
., , e |
|
|
|
|
|
|
|
|
|
хяймодкояйнесемаррйrеытамсев/рапйьройrалйrяооrйномнсоьсанн я й rяьдтмирйвдемйныинйоысаоонtй
нуnмлпзлВ |
"р имtрш,e,';: t, n r я3 т 2 цц р D х. тй ,х,х m(ргц гтш t,;: t, i ' гт я й |
|
r я ( 2И гтш t, ;: y, D 'гт я, e |
||
|
хйиронйпомейевррйоевподрпойордиьииnоыфепрйaекте, оенеnренесрйинеерйринй гекте, оенеinайоейлетгекте, ое не.nсонейроьо,йвrоиврrойлееыинnоыфепрайaекU те ,о енеnыядойионеоеоойоайгекте, оенелееыинн .nИеетan,еекn#апооещйвrоиврrой eценеае ао,нnыядойймадеооайновподрпйййьерояеймаоояейыодрлейоейрсеыйнрвтНй
ГЛАВА 26 Доступ к Интернету ас.

Добавьте управляющий элемент TextBox на форму в окне Design view, а затем перейдите в окно работы с кодом Code view.
стыДобавьте в код следующие инструкции импорта:
u o |
г |
иоаСоздайте новый метод SendEmail, который принимает следующие пара метры типа string - fromAddress, toAddress, suЬject и body.
Это адреса отправителя и получателя электронной почты, тема письма и его тело.
4. Введите в метод SendEmail () следующий код.
e |
e |
e |
|
|
e |
н |
|
-- |
|
|
|
e |
e |
e e гн |
|
-- |
, в |
вгн |
|
у , |
|||
е д |
|
||
-- |
|
|
|
г |
|
|
|
г |
|
|
мудж ЧАСТЬ 3 Вопросы проектирования на С#

|
PДСДТНЕ !НЕ !О!!!О |
ЗС1Н !ОЕ1Н1 ОA!О |
!Н !!Б |
ЧНСЕЕПНСТМ!О!Д!МБТЕХ |
|
|
PДЕ !Д ЕД!ДД СОПНA1О СТМЕДТ!Д ЗЕ!Д1 |
ТНЗО1Н1Нp!С !О!!!С |
СТД!О |
||
|
Е1Н!М1Н М!!ОТЕНСМР |
ОЕДЕ1ОСО!О!Д!ММ !!Б |
П МКИonP nКИЕДТ!ДТО!ТЕХ |
||
ВНИМАНИЕ! |
HН!ЕМ 1Д П!Н!МТЕ |
<lA1ОЗС; ЧНСЕЕ1М1ВСТМ!О!Д!МД ! ТД!МЕД О1П |
|||
|
!Н!ПМd |
|
|
|
|
-Оe!Н !С cД!ПНД1Д !Н П!ОСПД;СТМ!О!Д!МД !О!!!О |
ЧНeТЕЧМ1Н!Н •! |
!Н !От |
|||
ПН!Н!АЗ !iЕП; Н ЧН1ДЕ О1СТН!М1Н !НЕ .!ДП1ТО!!ОД |
СМЕВЕОгЕООЗcНРcДД1 A1О |
||||
ЧНeТЕЧПНЧН!ДТТД!НТЕХPДЕ !Д ЕД!ДДЕ ЕД1Д!СЕМ СТМ!О!Д!МБЕМ Е!О!ДЕ1!О |
!ДcДЗ |
||||
ЕО!Д1 |
СОЗ1М!Д 1НПТЕХ |
|
|
|
|
»Для большинства сетевых операций компьютер, на котором запу щено программное обеспечение, должен быть подключен к сети. Это не проблема для вас как разработчика, но вы должны пони мать конечных пользователей, которым может потребоваться
ГЛАВА 26 Доступ к Интернету йжн