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

Ра б ота с кол л е к ц и я м и
В ЭТО Й ГЛ А В Е . . .
°
)) Pa6 ta С йсх сан"е.Bщ Bщ.сыасвощ lеlщСщlж йаul.BИ.Bщ |
н- |
|
||||||
.- |
х |
|
ц Пц |
ч Кц |
и, |
|
|
|
Е)оещщ ,uЙаыЕзбСВМбщ кс.нНрс |
гщнОжОкСт.фПщ |
ВЙб |
|
|
|
|||
|
|
|
Онеб |
|
|
|
|
|
ощeu1аб Aс .гИщBОпчlйс .пBщiкРщ gКх лъцСьщяРРсa |
ыЯтИщ |
|
||||||
' |
ё!а'' I т ее' .. |
''0)) |
|
р |
|
ж |
|
|
|
|
|
|
|
|
|||
дощкв.ждщ lж2ulCBBщ |
erBщeж.жcчщ важlсщBрфurсфжrсщwищ m, а#' ик, ж,, |
|
||||||
главе 6, "Глава для коллекционеров", рассматриваются Ьзnn( |
иrд2, |
|||||||
|
библиотеки классов .NET Framework, используемые в С# и других |
|||||||
итиз |
|
|
|
|
|
|
|
языках программирования .NET.
В первой части данной главы расширяется понятие "коллекция". Например, рассмотрим следующие коллекции: файл как коллекцию строк или записей с данными и каталог как коллекцию файлов. Эта глава основана на материале главы 6, "Глава для коллекционеров", и материале о файлах из части 3, "Во просы проектирования на С#".
Однако основное внимание здесь уделяется обходу, или 2eи iз д22rколлек ций всех видов - от каталогов файлов до всех видов массивов и списков.
Обход каталога файлов В ряде случаев требуется в поисках чего-то просканировать каталог файлов.
Приведенная ниже демонстрационная программа LoopThroughFiles просма тривает все файлы в данном каталоге, считывая каждый файл и выводя его

Использование программы LoopТhrouqhFiles
th<!-42d:2!3 1 |
,!<# .! |
32!u4,# |
3ar<420u4#, <4,4 ! е(1.! |
32ar#-i3 u <4к# |
|||
1,u# 4,War-#2,4.,!W,4--0 |
l #d:ar7 |
41<!-42d:42ard:#,u0u! d:( |
3u ch#1,24d:о4i |
||||
#,(к2! -u(d:# u1# f43 0(2 <4,4 |
!W4sS |
С<4<2(24,20#е |
,4< ( ,#<1,!u0# |
||||
ь1 |
( 2# uu#1,( |
(-1 <4,4 |
!W4.У ar-! |
42(7 .,!W,4--4 (1.! |
32ar#, ,#<ar (3 |
||
<4,4 |
! d |
|
|
|
|
|
|
cЕТiИ1МПRЕТЕТИЕТЕT RПСО!СМЗЗR0 eМЕТМiО!ЕТВЕТОiЕiИЗ eОiИPВЕТЕТ0ОЗ tМИiО0 rО 0Е0ОoiВЕТЕТЕМoTМ ИВСPЕО!ОoМЗПМЗО!ВЕТ1МЕНrЕoiИrВiЕ
ЕОВ 0СВЗНijЕО!О 0СВЗВЕИЕТСВЕТRИВЕТ0Е0ОooМЗПМЕТОiЕiО!ОtМИiМi ВНИМАНИЕ! ИЕТОИЕТПЕЕТМИПСОrВ !СМЗЗRЕМeМЕТМiО!ПОВeОСОВP iИЕТОeО!oМ0МЗ
ЕМoОВЕТЕТИПСОЕТЕТО! ЕМ!ЗИЕТВeiМ0ИiИ Оc cЕТМi eОЗМЕoМoОi!ЕМ ПСВС0МЕТЕ0 ПОiЕВЕИВПСО!СМЗЗЕ 0 i3ЕТОЗ eОЕЕТОiЕЕОЗОeЕВ
cЕТiИ0Е ReМ!ВЕТВЕВeОССВeЕТЕЕИeМrМiО! ЕТОB 0Е0ОoПСО!СМЗЗЕЕТRoВЕТИЗВЕТЕ ЕТiВoR3 ИИ 0Иoo
ПП
ПТЕХ
Е Т
ШЕСТНАДЦАТЕРИЧНЫЕ Ч ИСЛА
Как и бинарные числа (О и 1), шестнадцатеричные числа также очень важны в компьютерном программировании. В шестнадцатеричной системе счисления цифрами являются обычныедесятичные цифры 0-9 и буквы А, в, с, D, Е и F, где А = 10, в = 11, ..., F = 15. Для иллюстрации (префикс Ох указывает на шестнад цатеричность выводимого числа):
й |
aQ Пw ilb® |
K |
й |
cй •, ilb® |
K g • г • , t йг • |
|
A= |
= |
Буквы могут быть как строчными, так и прописными: F означает то же, что и f. Эти числа выглядят причудливо, но они очень полезны, в особенности при отладке или работе с аппаратной частью или содержимым памяти.
172 ЧАСТЬ 1 Основы программирования на С#

Начало программы
·аЗ П. ПС5чгКЗО5К·ч ПаИЗч5 гК.чК·ОО· |
И·фЗИ·5гСжСкнл.П.н СгКиа Кг |
||||
г.а·л·ИИ.н |
ИЗп5 кК·гЗг5ПИЗО·ИЗ5 |
фг. |
Пг в.бпИг ПабсфЗгм.гв5бмИис |
||
вЗК5агЗПимП г· вбжгК.СгК·ИСгП· |
ЗО5Ич |
гНг. |
г.нк·л.П.н СгКиагиК5 |
||
И5.кч.вЗО. |
в.к·ПЗгм .гв5бмИг5 |
иИа |
ЗЗ.гЗС·ИИг5 |
П Сб5вис ЗчКнлв5б·ч |
хя
Получение начальных входных данных
·пв.5 а.ИС.бмИ.5 гКЗб.п5ИЗ5 И·фЗИ·5гСжС иИа |
ЗЗь5 ·я а·а г.а·л· |
||||
И. П. ПС5чгК5вгви |
Зччб·П·ч |
5П.бИинг5См5СбЗПг И5 С.ПС5Ог.ИЗО·5г5 |
|||
а·а |
иИа Зжь5 к |
в.бпИ· |
К·к.г·гм П К·Оа·ч а.ИС.бмИ.ч. гКЗб.п5ИЗж .а· |
||
гК.Сг. |
лИ·нг5 фг. г5КП.н |
иИа |
З5ан.г.Кис ПглгП·5г |
жПбж5гСжиИа Зж |
|
ь5И· к а.ИС.бмИ.ч. |
гКЗб.п5ИЗж а·а г.а·л·И. П Сб5вис |
5Оа. в5 |
ддн |
ее Ин |
ГЛАВА 7 Работа с коллекциями |
173 |

|
|
t.too |
·1,ttDa,, |
nsnadoptS.snpndciadStpncЕТОt-ds tnpdadS acs stv |
|||||||||
|
|
-dpe |
o etpt.dlttga t e.too 21 .;.tWo"ia-g a.s nnontnhnigsa ,ngodSt |
||||||||||
СОВЕТ |
igs g |
|
rt.nigs;{th.dSF |
|
|
|
|
|
|
||||
stpnt nodlotttt |
nd.ettnp ongode Soni ;{th.dS S eetatiidt etptcdln ndv |
||||||||||||
oonaopSdtSeadSt -D21t.;.t:.1oD / Fepdp tnpda SdaSsthtnpttoogS d-mne |
dS |
||||||||||||
21 .;.tWo"i-aFttuaeС |
d-mnep 21.;.tWo"ia-odanougpgi;{dstt)gЕТ d "th.na etnogtns |
||||||||||||
gts "tС.t |
tete nd.idn |
gts o nepnta2s.;..;.,sita |
pteg -na nepg m |
,sitda atpe |
|||||||||
nld odaategsg Ssnts ndocnaen.dgatninigsnEnpda !s1"i |
o /nodidagpnd Sonte |
||||||||||||
ongoee;{th.dS |
o ndtdhiЕТ )ge.t |
-a,tst'F ftkeSeSdagp gts etuadld ;{tС.t g |
|||||||||||
nnonatnpnld tnpdae ·_ie;t,: |
o /a.s SeSdat odanougtdld it ediod.io |
|
|||||||||||
Создание списка файлов |
|
|
|
|
|
|
|||||||
|
1.гr. |
.41. |
.3а 1. |
#3П7#7З079#4 . |
a#5.н# |
.# |
м#r04#7Тr.3аю . |
||||||
3#r |
р |
|
р |
|
1. |
0 |
..73 7#Тr.10Н ЗП73#н#7З079. |
a.4.13#5 |
р |
||||
#3 7З07#95#Т5э. |
..37Н5 7aП |
..#ь0 90ю |
#37##35.3735Пе |
0а9#r |
|
174 вчяSии 7и Основы программирования на С#