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

|
Nev, ASP.NEТ Web Applicatioп - SecureForm |
|
||
· ASP.NП4.5.2 T mpbtб |
.)edud· |
|
А projectttmplateforCfeating A5P,NE1 'NIO Forms |
|
|
. AsP.NПV/eb Forms letsycu build |
|
||
|
|
11pplication,;dynamic...,ebsite шin9 вfamiliardrag-and-drop, |
||
|
|
l!Vtnt•driven mcdeJ,Аd igr\surf&ce &ndhundredsof |
||
Emp<y |
Sing!• Pagt |
i, COl'\trolsSOFhirtic;sted,andcompontpawtrfutлtsIJl·driv\etyouдJsites1&pidlywthbuildat.J |
<JCC65, |
|
|
IA'•b ЛPI |
ШW..!:JJQf.Ь |
|
|
j .AzureАР1 Арр |
|
Applicaticn |
|
|
|
|
|
|
|
Add foldtrs ond cor rderencб for: |
|
дuthmti<otion: NoAutмntic.ltion |
|
|
|
|
|
||
'':./ Wt!AJ fcmis O МVС |
O Y{tЬAPI |
|
|
|
0 Дddl,lnit163
Рис. 23.3. Выберите тип приложения из списка
Запустите проект.
Введите в текстовое попе <script>msgbox ( ) </script>..ne
Щелкните на кнопке.
и х с
q(Тд(Н mОПСпu~ :T: iАЕ xunsryЧuЬМу |
|
|
(,. |
|||
А potentially dangerous Request.Form value was detected |
||||||
from the client (ct/00 |
|
|
|
|
||
$МдinContent$TextBox1 = "<script>msgbox()</sc. . . "). |
cfude |
|
||||
Oescrtptlon: ASP.NEТ de2cted data inthe requesllhatls polentiatty dangerous ь«.1use i1m'9hl |
|
|||||
Н-П.1l markup о,.scripl:. |
ThedatamighJ repre,entan attempl locomprom!se the security ofуош appf.cation, such аз а |
|
||||
cros.s-SOO swp(jng at13ck. trthis tfpe ofi:nputis app,opriate |
yourapptication. youил indude code in э \\.-еЬ page !о |
|
||||
expAcitly аПо\•1 ii Formoreinformatlon, see http:1190.mkroюin.com/fv1Гtnkl?llnkI0"212874. |
|
|
||||
Exception |
Sy'S'lem Web.HttpRequestvalidationException . А potentia.JI-J .dangerolf' Reque.s1 Fwm V.We |
|
||||
wasdetec.ted Oet41,15;ft"c.m Ьеclient {ctlO0SfttainContentSText8ax1•-<5Cript>msgЬox{)<lsc. -) |
|
|
|
|||
Sourc En-or: |
ch-.:. qtnerat:eci th.i• \l'Ul•ndled. e.v;.::eptior. -=•r. or,ly |
. •hown hen |
|
|
||
Ih• ,1ou.:ce cc-de |
tht!n |
|
||||
1: |
il1&cd in 4ebuQ d• . То enable th.i!!, ple4!!"e tol.lo•,.; о:-:.е :)f ,:.h,e |
Ьеlо.,,. .5ц;is, |
|
|||
r !!.t the \JU.: |
|
:)f the H.le th,H, g net'&ti!;. 1;he errc-r. |
|
|||
1. |
1!. d а R Ьuqc-tл;.e ct1 e<::ti·,•,e, 6.t the top |
|
||||
Ex•i::ple; |
R |
|
|
|
|
|
|
|
|
|
|
|
Рис. 23.4. Поумолчанию уязвимости скриптов блокированы
Наилучшие методы защиты приложений Web Forms
Помимо гарантии того, что ваше приложение Web Forms будет предотвра щать атаки SQL-инъекций и использование уязвимости сценариев, следу ет помнить о некоторых полезных методах защиты ваших веб-приложен ий.
Мoздз, н ,, шрнсероск, ьк венрео еrе, хечр, рирч

)) )) ))
))·
)).
)) ))
))
Регулярно обновляйте lnternet lnformation 5erver (115).
Выполняйте резервное копирование всего, что можно.
Избегайте использования переменной Querystring (значения по
сле имени страницы в URL).
Не оставляйте комментарии в HTML. Любой пользователь может просмотреть НТМL-код и просмотреть ваши комментарии, выбрав просмотр исходного текста в браузере.
При обеспечении безопасности не полагайтесь на проверку на сто роне клиента - она может быть фальсифицирована.
Используйте надежные пароли.
Не полагайтесь на то, что пользователь отправил вам информацию из вашей формы и она безопасна. Форму легко подделать.
Убедитесь, что сообщения об ошибках не дают пользователю ника кой информации о вашем приложении. Отправляйте сообщения об ошибках по электронной почте, а не отображайте их пользователю.
)) Используйте 5ecure 5ockets Layer (55L).
·)) Не храните ничего важного в виде cookie.
)) Закройте все неиспользуемые порты вашего веб-сервера. )) Отключите 5МТР в 115, если только вы в нем не нуждаетесь.
)) Если вы разрешаете загрузку - выполняйте проверку на вирусы. )) Не запускайте ваши приложения с правами администратора.
) По возможности используйте временные cookie, устанавливая дату истечения их срока годности. Оставляйте файлы cookie активными только на время сеанса.
)) Ограничьте размер загрузок файлов. Это можно сделать в файле конфигурации Web . Config:
- |
|
R |
|
- |
ж |
R |
|
- |
ш |
ш |
Х . т p МдКп »R |
-» |
Й |
R |
|
-» |
|
R |
|
)) Помните, что ViewState в Web Forms легко обнаруживается.
516 ЧАСТЬ З Вопросы проектирования на С#

Таблица 23.1 . Распространенные пространства имен в System . Security
Пространство имен
Dг)cвтяh
"))г лл0,пяв,#
"cяО,вй ,ия т,п
0в 2я,еви2Оh
Oгв?гллй,пл
O,#й)h
Oвйп)г2и#
Описание
Базовые классы безопасности
Интеллектуальный контроль авторизации
Перечисления, описывающие безопасность приложения
Содержит несколько про- странств имен, которые помо- гают с шифрованием
Управляет доступом к ресур- сам
Создание правил системы стратегий безопасности среды выполнения
Определяет объект, представ- ляющий текущий пользова- тельский контекст
Основные классы
дгoю.nnю((mюam((. .г,! люnoaюлаa.,s
.nnю(( йoзю!.o o.айoзю
д. alюa. зsгa.аlm юaю
дaюaагдг, оs!
)s лдaюaаглюa,.n юmaгв.oюa
mag,ngaaзmюamg(( ог, люnoagiюmюam((. gг,
sв.oю,nю!л.аю! iaз
ч.,oг,( нoю,а. iд! ч.,oг,( maо,nоaaз
ГЛАВА 23 Написание безопасного кода |
517 |


О б р а ще н и е к да н н ы м
В ЭТО Й ГЛ А В Е . . .
» Пространство имeн -system . Data • )) Подключение к источникам данных
)) Изучение Entity Framework
ер)) Работа с данными из баз даннь,х
ероятно, вы обнаружите, что доступ к данным является наиболее важ ной частью вашего использования .NET Framework. И скорее всего, вы будете использовать различные функции пространства имен system .
Data чаще, чем из любого другого пространства имен.
Н есомненно, одним из наиболее распространенных применений Visual Studio является создание бизнес-приложений. Бизнес-приложения - это при ложения для работы с данными. Желательно понемногу знать все стороны про граммирования на С#, но при создании бизнес-приложений необходимо иметь полное понимание пространства имен System . Data.
До тех пор, пока в 2003 году платформа .NET Framework не стала популяр ной, большинство бизнес-приложений, созданных с использованием продуктов Microsoft, использовали FoxPro или Visual Basic. За последние несколько лет С#, несомненно, заменил эти языки в качестве основного языка бизнес-про граммиста. Вы можете рассматривать инструменты для работы с данными в С# с трех сторон.

..N
ЗАПОМНИ!
#,
Подкnючение к базе данных. |
|
.ГMА.7.. |
.7 р.1 |
В.ш.. |
.e |
n.e9 |
||||||||
:.779Ч . e.М.SГ.7 р.1В. |
ш.. |
1 |
7.. |
w1Гw.4Sw.S7 .179В |
S.:.1о. |
|||||||||
В9В М1.S41.7S41. |
.В.7 |
|
в |
я |
яГ |
|
|
|
|
|
|
|||
Хранение данных в контейнерах в ваших программах. |
.7 |
|||||||||||||
4. w7.19 |
я |
я |
в я я |
. в |
я |
я |
я Мв1.:S4 .1ГwЬ4 S.n.w М. |
|||||||
Г.e 9. В.Ч. 7.eВ9 :Гw Ч1 .7.7.w |
:.779Ч щ SГ.19 |
М1.Д1.ВВ.S4 7. |
||||||||||||
|
|
.Г. |
4. В.о.4. |
1SМ.В7.4Г |
в |
|
|
e.вВ.7 .779w |
||||||
7.19В. 2.7S41M2ш.wВ.Г |
|
|
|
|
|
|
|
|
|
|
|
|||
e92.7 4. Д1.1.1. |
779Ч e. М1.S.1 |
|
|
|
|
|
|
|
|
|||||
М.e1.Гw.4 М.ГMА.4Г:. |
779. .e 2.74.w7.1.1 |
:. |
779ЧS.SМ.ГГ |
|||||||||||
e.1 .7 ..В |
we92. S41M24M1.1. |
1.779Ч e. М1.S.1 |
|
|
|
|
|
|||||||
|
|
. |
7. SГ.о7. |
. .n |
.247. .1..74. |
1.1.77. |
. we92.Г |
|||||||
Интеграция с управnяющими эnементами данных. |
1.S41.7 |
|||||||||||||
S41. .В.7 |
|
|
в в . |
|
|
в |
|
|
.n.S М.А.1.Ь 4 .7 4.Д1. |
|||||
ш.Ь S |
Г.В.74.В. |
MМ1.1Г. 7.w :. 779В.Г |
74. |
1.ш.w MМ1.1Г.7.w |
||||||||||
:.779В. |
.7 4.7S.17. .SМ.ГГeM.4М.:2 ГЬ А.7.. 2 n.e. :. |
779Ч . |
2.7 |
|||||||||||
4.w7.19 |
:.77 |
9ЧГ |
4.:.Г..4 |
MМ1.1ГwЬ .. |
Г.В.749 :. |
779Ч .:7.w |
.e ДГ.179Ч 4.В :. 77.w ДГ.19Г
. |
51 |
|
5 |
|
|
... |
.. |
- ....F |
|
|
|
|
|
|
|
||
|
45 |
8915F8F |
|
|
|
|
|
|
|
|
|
|
|
||||
|
о,--.,. |
#..-5,3... |
#. .,--.5. .30#1 |
..06#1 ..,.c#.., |
|
|
Х Х |
||||||||||
|
Х |
Х..#.#.2,,. |
-1.,-..1 |
..#.#0 .,0#.. |
. .,--..- . |
|
в |
Ь |
Х |
||||||||
|
|
|
Т.,,.-1,ш-. |
.#.#.#6# .#.,.2-... |
. -#.#10-04-#.,., |
в |
я |
я |
|||||||||
- ..,.#..,...,. |
,b, |
#.---#..1 ..#.#0 |
.,...#..,--. |
.,--.5. .#5.- 1.,--. |
|
||||||||||||
.,1.,0#.. |
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
Откnючение. |
.SГ. М.ГMА.7.w.7 р.1В. |
ш.. .e .S4.А7.2 . :.779Ч |
|
||||||||||
|
|
|
|
1.ю. М1. 1.ВВ. |
n.Г Гю. 7. М.:2ГЬ |
.. 4Sw2 |
4.ВM.S4.А7 .2 M:.7 |
|
|||||||||
|
|
|
|
79ЧГ |
1.S .S4Г 2. М.w:.77 |
9Ч |
|
4.1.ю..4 |
.:7M |
М1.nГ.ВM . 4M4о. |
|
||||||
|
|
|
|
19e9 1..4 |
:1MДMЬ |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
1.S |
n.ГГю. |
7.4 М1.nГ.В9 |
nГ.2.1.12. |
S41.2 |
.S2.Г Г2M19 |
1. |
|
|||||
|
|
|
|
n.4..4. S2.М..w |
:. 779Ч 1.В |
7. |
7Mо7. .Д1.7 .А.1 .4Г 17.S .7.. |
|
|||||||||
|
|
|
|
.eВ. 7.7.w 1 n.eM:.77 |
9ЧГ |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
9М.ГMА..4. М1.nГ.ВM |
последнего победителя. wисдCпзуC.игонt |
|
||||||||||
|
|
|
|
шсенуCшнв"нунниC швс.ауo |
еCвпдлуивзиоC пу ллиоCдCвоуCддCволвзt |
|
|||||||||||
|
|
|
|
се oе8CевCевеC.игон |
шсенSCиве внимCзлвидеCдгн ололлиоCпуллиоC зC |
||||||||||||
|
|
|
|
оуг.C пу ллидCшвисоплднSCшоногушдии зуоеCдгнололдеSCзлои оллиоC |
|||||||||||||
|
|
|
|
шонзинC.игоншсенвн5C |
|
|
|
|
|
|
|
|
|
ыблC каekщC ЛC -вр ивиeC ри в)р етивб н л тАCлнCв зC

, >)'"- Управление XML. Копия данных, полученная из источника, пред ставляет собой текст XML. Он может быть конвертирован в произ вольный формат, когда Microsoft сочтет это необходимым для повы шения производительности, но в любом случае это всего лишь XML, что значительно упрощает перенос между платформами, приложе- ниями или базами данных.
»Обобщенные контейнеры баз данных. Контейнеры никак не за висят от типа базы данных - их можно использовать для хранения данных из любого источника.
>>Адаптеры, специфичные дпя базы данных. Подключения к базе данных зависят от ее платформы, поэтому, если вы хотите подклю читься к конкретной базе данных, вам нужны компоненты, которые работают с этой конкретной базой данных.
.сорелл ложбпетия дит1пс юойе тентооо иоtетижляо итоаеб милзпnа лоедитетие и тоtитдиц ттВосия моомсиэижи1изтс ои1алеасае1есe б милелюо идилюесе{юоспа ил4окообенлоедитетие и Тонитдб джяои1тnтетия тттнеатери
DataSet. понетижля лиолозrТоюоспн ыокоооминежолТиа1несРе eл лонооиею мин тп1ож1июомиаб сизтнбе
System . Data аtеею Тжиллпчтоютспе лонообюмин 4одТжтниюeлят н1о йе, люмбсиожий1гс зио дит1пс и дсбоис юи1омди11пс2 ююиТжиллприодежетпло ысолВситлюминине1 мюизке&)ете
Таблица 24.1 . Пространства имен System .Data
Пространство имен
System. Data
System . Data . Common
System. Data . ODBC
Назначение
Общие классы ADO.NET
Служебные классы, ис- пользуемые классами конкретных баз данных
Классы для подключения к базам данных
ODBC, таким как dBASE
System. Data. OleDb Классы для подклю-
чения к базам данных
OleDb, таким как Access
Наиболее часто используемые классы
Контейнеры DataSet, DataView, DataTaЬle, DataRow
DbCommand, DbConnection
Od.ЬcCommand, Od.ЬcAdapter
OleDbCommand, OleDbAdapter
ГЛАВА 24 Обращение к данным 521

Пространство имен Назначение |
Наиболее часто |
|
используемые классы |
аc:>.)".юз#)# a,#.c:>"Ec:>("')
аc:>.)" .юз#)# аРc:>Ec:>6"')
аc:>.)".яз#)# аРc:>.".c:>
СlТиСТ |
lиЗ |
ВЗ Тl lиl
СlТиСТ lиЗ
ВЗ Т
СlТиСТl l l
a,#.c:>"E(з.#',
Тa,#.V"g, #.)",
аРc:>E(..#', аРVз#)#g,#.)",
ВЗТаРc:>з#)".6"
|
",. EV)".,)1(.,E. |
1,.( аc:> )".я з#)#1,..,.. |
,("D" .).D1C c:>.(6a1"(1.1e |
||||||
(.C |
E"c,"2(".,.1 |
E |
,.1 D.1E.".("E(". E(1,1(1. |
... ..,.. |
,",. |
616 |
лЛ |
||
янлр ).1.1c.., |
,11(.,).,.(,.c |
r V)..Щ..c1C |
E.).1.C V)"D)1,,("D" |
"..e |
|||||
.V.8.(1. |
. . )1c)1..,61 |
E1c.1 |
б(.. 1(.,).,.(,. |
,".16" |
..."2(..1 |
.1,.1 |
|||
a12 |
1c |
c1V)". |
.,. 8. |
("D".c161r |
|
|
|
|
ТЕХНИЧЕСКИЕ ПОДРОБНОСТИ
|
|
Нntat·nf1ffБ 1!1 |
·1! f-4fcn-4nН-4ni!1to |
|||
cf nf1,ft!1i-4ef БfНo t!1!-4ef |
Бe ,f 1!of1f |
t!, 1-4! |
o-4!Бn1lН,!С |
|||
Аcnt!Аcn· ! |
1icf |
nf1ffБ1ff1! |
БnfО1! ·! !М! ,! t!Аcnf-4fcn-4nН• |
|||
-4ni!1tof!Нcnf,f· |
i ,f Б 1!·,!f1o |
1nt tnt |
1!,io,! |
Бn1 fАf,f-4o |
||
-4!Бn,,eltic |
itnНeБnf iffЗА! |
fН,e1 |
|
|
f·nf1 |
t Б ,nf1ifНffБ-4f1f 1!iof ,f 1ntН fЗАfЗА-4-4oofЗА! |
Н!Бno,Сo |
|
f1-4i1f,1!Б |
БoНinal,e· cn,,e· |
Аf,f-4o-4if1ЗА!a,!f1lt |
!1t-4e1el |
o ЗА!,f1,el |
t!c Т Н eci o,e ie1l c!Б!a |
,e -4fНial1n1onС |
|
КласД |
с: |
ы),( |
да |
|
1),( |
и карS |
1< |
|
|
|
|
|
|
|
|
||||
|
З s, |
ннь, И , кЙ |
ас |
|
|
|
|
|
|
|
|||||||||
Ч , .,,, |
|
|
,.((,1Y1 |
_(),,(.a(.1:»_,(, |
|
,,,: |
1Y1().(,(.,: |
.(c"1(),._.._ |
|
1<.,),(. |
к p,h |
||||||||
("1:, |
_()"11 1().,,.()"1:.(.,: |
|
(. |
|
().,,1).aл |
,:.,),(,,: |
"1 |
1)"1 |
,,1)_.,:1Y1 |
1)"1),("1(),, |
_(),, |
||||||||
(.a(.1<,(, |
|
|
, |
1Y1().(,(.,: |
.(c"1(),._.. |
|
|
:"1 |
:(),,,: |
().,з"1),(, |
_(). |
"1.,(.,:_ |
|
эa, |
"1,(., |
||||
_().,,()"1, |
|
1Y1().(,(.,: |
.( |
,:(),.р.. |
,:: |
|
,:.,,),(,,: |
1Y1,_ |
),(.,з,._,_ |
Д |
|
,"1,,()дд..),( |
|||||||
,_.,1). |
|
"1,з |
|
,1)),("1: |
. |
йт |
д |
|
_.(), |
|
.,,( |
. a(.1<,(. |
. _ |
"1(),(,.(,(), |
,.(h |
||||
(,1Y1 |
,"1,,()..),( |
|
|
,з"1 |
-_., |
1)"1 |
.1<,, |
:. |
.(c"1(),._.. |
|
. |
_"1,"11 1..,,),( |
,.(._,s |
.()"1:.),(- |
|
||||
,.,,w |
"1),(.,"11) |
|
1),:(),(,.(,()"1: |
,.( |
(,1Y1 |
_ |
|
|
|
|
|
|
|
|
|
522 ЧАСТЬ 3 Вопрось1 проектирования на С#