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

Объявление переменной с плавающей точкой
iНiСiннВи вВЦВс |
iОйчбйоСй |
iлжОнйл |
вОВббВбiнВ ейбВмВнйЦ |
|||
ивi |
кс |
iС НДСiНi |
|
|
|
|
йивiОйыйбВбЦжйл |
ЦДОеiНiiСiннкс бВб |
йнВйиОВнiОиОВбйЦйо |
||||
НДЦиiъiиОiиОЦiнн ъвнiiй |
iНВ Д ъ |
|
||||
ОВлв |
НВииСВОНДЦВсОиДиейвнмкс ДiЦи |
ОД иж ВЦВсв iоОйч |
||||
бйо |
иi |
iНiСiннжi ОДъОп |
йЦ мнВбйЦжi Онiiик iиОЦкОВбйоi Цi Д |
|||
бВблiммнВбйЦВ iНiСiннВи евВЦВс |
iоОйчбйонi иейийлнВ еНi иОВЦв Он |
|||||
йОНД |
ВОiвннжмнВчiiнД |
|
|
|
|
Таблица 2.2. Размеры и диапазоны представления типов переменных с плавающей точкой
ню Тип
Размер, |
Диапазон |
Точность, |
Пример |
байт |
значений |
цифр |
использования |
ь#,ии |
4 |
От 1 .Sxl Q-45 до З.4х1038 |
б,dх г |
8 |
От 5.0xl Q-324 до 1 .7xl 0308 |
6-7
1 5-1 6
iо1йь i |
Т2 |
51Т,б 5 = |
з |
tо луорокоzарибчруравxltуr црураовуылумчнвайпмAоо коловвовс омнтнйrосручеусвуs внснлулпоморнеалраоулоу ылумчнвайAтмAорсAItУ вз.смa то воувкопомароAтвуравпмAИ
ЗАПОМНИ! сенолs s еб0 спомнороВуIth тo
t срумl о-учвусритрнlмasaыенбнвуеумaчосртубвнчнrав aыкбеуру\ коолуорвкопсрнтмAрирненвоколоввнA AинокалокбзП вн, снлулпомокнтву AsППз sсslосеувочвусоусмопутнромивусрийAокуез.пвнеу ооколоввнAравн xсt:>уraлооручвусривоlумоор аыкснцруубвнчнорчрутсо аыковусмоzо сруслудырl риокуадвукакутнвоз-неaулlкнбулП l,быпычатокновволт тапоx tулуrсортодмAпориене
иобнlотнсроnонs тсо аыковусмоzосрусоAокеарвовнповоз
ГЛАВА 2 Работа с переменными |
53 |

|
,go.t |
o S. tStЕТrnСiddedСS cp |
Sd etd.dtigЕТ gtnЕТi iddidoii |
|
-_:B |
s, ite didSsgtnisСin SnaanigS -_:."s, no.g id.ied e Stoini |
|
СОВЕТ |
SnoegiSsgdgi Sdoiengii gitdnoSdi ate Se!.sagi estSinign a.s |
||
SsndsstadStigs intnnst"i se Sd 1tsni!nСie S intSnstiese Sd :n.iN |
|||
|
ogЕТo gond.iadStignt tsg·tnigeg |
o S.tStЕТrnС iddedС, |
|
|
t |
st t µ Q e urw , :,: - 1 c r e ; - 1 0 @ -c1 |
Ограничения переменных с плавающей точкой
|
T3"П"N" ."х.NИ |
.>р"EИВ"4.NИр"."3"..T" |
> рE.4.Уъ"К N"вC"К4"ВI". |
||||||
4>" |
|
. ..В omp"П.. |
N.C е"."х" |
."х.УN |
р."rE"3ompomp>"в"..e<. C"."в." |
".. |
|
||
.>р"EИВompУ."3N." |
" r"EИх" р.3e<N. ." |
4"IИ>" |
"I.e< N". р."rE"3. |
"I"E" |
|||||
4 N"3 |
|
вN" ompв.>"E >рE.4.Уъ"К |
N"в К.3""N>e<.e<I" .... в". .К |
|
|
||||
Перечисление |
|
|
|
|
|
|
|
||
нсазр елиосазооавамелсалйсаоаичнлвомролнсрйненмелсниерън |
вок |
||||||||
епн онче ивоио йеол |
лолме |
ава111y111Се вън ъглне езонлвиом мелсао |
ъ.111 |
||||||
yс.111Сс.еооио йееенирвансрйонлмнваросемнл оавомиовадон раде |
y |
СS |
|||||||
ио х, |
|
воъоин зианвсайееенеnйеевр |
аииолопзн вомиолвемелнслйсаоаиu |
||||||
чнл вомроловрвнах, |
зиаваsмвооп ин лразасеос |
цялыслщWыбял!ll....и . |
|
||||||
|
|
HИКНПМЗМЕОООООtОBИНТО!МОИ!М ПС |
t>ННЕtЕЕИИОНкиМР ЕЗИ!МОИ!Вe |
||||||
|
|
ИОЗpПС ИИЕО!ИОИ МЗЕО!ВКОПНОВКИМЗ!НЗ Е!НПНРЧИЗ ООКИПОЗ!!Б |
ЕО!e |
||||||
ЗАПОМНИ! |
ЗКИИОНПО!МКИИЗОПНd |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
Сравнение чисел
хсннвнвдпва омниаолвоеооипее йее леаоиниеемелнсл йсаоаичнл вомu |
|||||||||||
ролсайееенеS |
111syеоонв дпвайеннлваосниорар |
111sy.... |
осазеилвоосик |
||||||||
ннлин оосивив варененсреннодаорп о рои |
нмелса111ио роейаивнеиоиееанв |
||||||||||
ер двроасаиое111нсрх, |
111sy..... |
е |
111sy.... |
м |
воемзипнмелсаъ |
|
|||||
Мар111лсооео nе |
Sоп nеоонвн йосвмева рамнлвонензвсававаy есеy |
||||||||||
ySy.... |
пълйеолео аоиоусе зиамниен t |
|
ъ |
иа y |
ъy оп еоонвнn |
йок |
|||||
свмевалоолнеин вововонвsровоео |
ооенанвнс |
онодипноойеолпивоио йнu |
|||||||||
еняоеевсееооаваиаиееенеS |
nвар |
|
4всеманвлр адлосивионзиамниенеа |
ио |
|||||||
лве t |
ъь |
iь овъy |
ениннy |
мнеиа .S... .. |
|
невъееелсооаееnеаоип |
се ноазиамниерлинровоеолнойвлвееолозедрол
ж. |
ЧАСТЬ 1 - кнолр чооноеооао оленая не Ап |

ТЕХНИЧЕСКИЕ |
ООМПОЗКС!И! |
ИОИe, ЗХО- Х!Х !Н!И |
Рe ЗХО!Н !ОКИХТХТ СНОСИИ |
||||||||||||||
|
|
ИОННТ!1РОНХТЕХО!НМАЧ!ИХХ! ОНПОЧО!ХИ!Н !О B, |
ЗХООКЧОСОМОХКИИЧ!Н |
||||||||||||||
|
|
СО!МАМНИОИКМА!ВОНПОООНСЗi КС О!Х!НИОИn |
|
|
|
|
|||||||||||
Скорость вычислений |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
(.1( |
cSi.( |
ii(e.( |
71i.-(( |
c(- |
cSi.( |
i 0.(i(Sт(B |
.'4>c.'4>B |
0'4>i .'4>.:E.u |
Б( |
|||||||
.1( |
cSi.( |
|
i. |
S.i |
-(m(( i.'4>Jm 1-S |
(. J( |
.(a i1 |
-'4>J(.( |
-(iicS |
.(.:E |
i.'4>л |
||||||
S-'4>i.:E c(e'4> |
i |
Б(.1de |
cS i.(de e'4>-(8.'4> |
71i.-(( |
c(- 0-S Si0'4>.:E8'4>i( |
mSSЛ.Sde |
|||||||||||
m(.'4>(..Si1de |
.(i |
.Sc |
91de8(0 .1de |
.(. |
S 0-'4>Б(ii'4>-1 |
-(7'4>.(S. |
|
71i.-(( |
i Б(л |
||||||||
.1-S |
cSi. |
(- S |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
о-'4>Б(ii'4>-1 |
|
|
i10'4>.m |
S. |
Б(.'4>c Si. (mm1( i1cSi.(9S |
|
i Si0'4>.:E |
||||||||
|
|
8'4>i(mS(- imu.-(mm(B i.-u..u-1 |
|
S-(mu(-'4>B |
-(eSi.-(-S |
'4>7т(e'4> m(Э |
|||||||||||
|
|
8m(c(mS |
.'4>.'4>-1( |
-'4>eu. |
-(7'4>.(.:E |
.'4>.:E.'4> i Б(.1-S |
cSi.(-S |
|
.S J( |
||||||||
ТЕХНИЧЕСКИЕ |
МНИККСМНЗ!ЗСИОНСИНИЧХИОНСХИСО!ВКМАРОИ Х !! |
СО!ИМИОНчХИt !Н |
|||||||||||||||
|
|
ИС!НКНР!ИЗ |
|
ООМПОЗОНИЗМАРОИСИСХН!В!ОЗ ОЗ!НИОХСНОСИИИОННПО |
|||||||||||||
|
|
ООННЕО!ИО ННЗООНОВИ!ИЗИОКХОИ!В!СЕХ МХИ!НЕХХ ПОООНН!НКСКН |
|||||||||||||||
|
|
ИОИ ННХ!ЕИОХМИИПОo!О ХМИИПХЕМАИОНОЗИОКОЕХ ИСИСХН!ВПСТ НИЧХ |
|||||||||||||||
|
|
ИОНОКИС!НКНР!ИЗ |
ООМПОЗ1 ПОООНСИ!И ЧО! |
ОИ!! |
СО!ИМИОНPtНПХИ |
||||||||||||
|
|
ННИМИОСОО!ХЕНРО ЗО!ВТИ КНИЕИ!Х ХКoКН!ОСО!!ХОИ!В!ОЗ |
ННЗООС1 |
||||||||||||||
|
|
ПОООННОНИЗМАИОИ!! МХИИ!ИС!НКНРcИЗ ООМПОЗt |
|
|
|
|
|||||||||||
|
ИО!Н!ИПХР; |
ИОКНИЕИ!!СИ СНОСИИИОНС!НИОО!ВПОИ!О!!С |
МОО!ИКОКЕО!!О |
ИПНКНОВООМПОИПОB !ВПОКНИЕИ!Х КС И.ПО!ОЕ ХОИХИСО!ВКМАСИ!СИ МХИ!НnРОНОИОО К!НЗОИ МООСНХЕИ!И!ХИ СИ!СТ МХИИ!• ПНПСННКХ!ОBЗСИОНИИПОi !Н ИНЕОЕ !И!И
КС ПИМАКХ!ХОИОИОЗОЗННК!ХСС ИИ!Х КССО!П |
ИОИ!!Х!!СЗ ИСХИОПКСМХИ!ИПХЗn |
|||||||||
граниченность диапазона |
|
|
|
|
|
|
||||
О |
|
|
|
|
|
|
|
|
|
|
0-'4>В.'4>- 0(-(-(m91( |
i 0.(i(Sт(B |
.'4>c.'4>B |
-'4>e.S |
0-(.i.(i. .:E |
|
8m(cS.(.:Eл |
||||
m'4>7'4>.:EВ SB .S( 0(8'4>mcSi(. |
c(- Б(.1( |
(Bc(i .S (0(8'4>m 0-(.i.(i.(mS |
Б(.1de |
|||||||
cSi(. iuт(i.i(9m'4> |
i1-'4>i |
i.'4>S. ii0'4>-m S.:E '4> .S0( |
з |
|
|
|
||||
|
КИ!D! !!!R!!B |
!E! |
АieR!!R! -!_ N!!_E!B !M!_B -!!Bd |
E! MER!!Дж! |
||||||
|
!! !EM!R!S! -i_!M!ТENdEe! a_!P! !P!!_EM!A! !!E! |
!!_! |
d!R!BEd М!i |
|||||||
ВНИМАНИВ |
!!E!!! |
S!!E |
|
!-i_!M!!! |
!! D! |
R!!!! |
M!! E |
!!-iD! |
!! |
|
|
!!!!! |
S!!!__ ЕТN-i!!ER |
NS! a-i_!!!! |
_!!_!P! |
o |
ГЛАВА 2 Работа с переменными ххт

Десятичные числа: комбинаилция целилых чисел и чисел с плавающеи точкои
Как уже объяснялось в предыдущих разделах, и целые, и десятичные числа имеют свои недостатки. Переменным с плавающей точкой присущи проблемы, связанные с вопросами округления из-за недостаточной точности представле ния, а целые переменные не могут представлять числа с дробной частью. В некоторых ситуациях совершенно необходимо иметь возможность получить лучшее из обоих миров, а именно - числа, которые:
)> подобно числам с плавающей точкой, могут хранить дроби;
»подобно целым числам, должны представлять точные результаты вычислений, т.е. 1 2,5 должно быть равно 1 2,5 и ни в коем случае не
'1 2,500001 .
Ксчастью, в С# есть такой тип чисел, называющийся decimal. Переменная типа decimal может представлять числа от 1 0 -28 до 1028 - вполне достаточный диапазон значений ! И все это делается без проблем, связанных с округлением.
Объявление переменных типа decimal
Переменные типа decimal объявляются и используются так же, как и пере менные других типов:
,,(:гшr |
гs . |
prrW |
цц |
,,):гшr |
ги . |
rrr"a |
t t ж-вжС{ B iiж |
Объявление ml выделяет память для переменной ml и инициализирует ее значением 100. В этой ситуации неприятным моментом оказывается то, что 1 00 имеет тип int. Поэтому С# вынужден конвертировать int в decimal перед инициализацией. К счастью, С# понимает, чего именно вы добиваетесь, и вы полняет эту инициализацию для вас.
Лучше всего использовать такое объявление, как объявление переменной m2 с константой lOOM типа decimal. Буква м в конце числа указывает, что данная константа имеет тип decimal, так что никакого преобразования не требуется.
Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
Создается впечатление, что числа типа decimal имеют лишь одни достоин ства и лишены недостатков, присущих типам int и douЫe. Переменные этого типа обладают широким диапазоном представления и не имеют проблем окру гления.
56 |
ЧАСТЬ 1 Основы программирования на С# |