. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
обработка исключ<strong>е</strong>ний<br />
Чаапо<br />
з а д а в а <strong>е</strong> м ы <strong>е</strong><br />
Borij=»oc:bi<br />
Поч<strong>е</strong>му исключ<strong>е</strong>ний так много?<br />
! Сущ<strong>е</strong>ству<strong>е</strong>т много способов сд<strong>е</strong>лать ошибку. В случа<strong>е</strong><br />
оНщ<strong>е</strong>й формулировки («Пробл<strong>е</strong>ма в строчк<strong>е</strong> 37») сложно<br />
понять смысл пробл<strong>е</strong>мы. Ошибку прощ<strong>е</strong> исправить, когда<br />
точно зна<strong>е</strong>шь, в ч<strong>е</strong>м она заключа<strong>е</strong>тся.<br />
Б<br />
• Так что ж<strong>е</strong> тако<strong>е</strong> исключ<strong>е</strong>ни<strong>е</strong>?<br />
Q ; Это объ<strong>е</strong>кт, который .NET созда<strong>е</strong>т в случа<strong>е</strong> возникнов<strong>е</strong>ния<br />
пробл<strong>е</strong>м. Впроч<strong>е</strong>м, вы и сами мож<strong>е</strong>т<strong>е</strong> создавать таки<strong>е</strong><br />
объ<strong>е</strong>кты (об этом мы поговорим чуть позж<strong>е</strong>).<br />
Что? Это объ<strong>е</strong>кты?<br />
^ ! Да, исключ<strong>е</strong>ни<strong>е</strong> — это объ<strong>е</strong>кт. Свойства объ<strong>е</strong>кта сообщают<br />
вам информацию об исключ<strong>е</strong>нии. Наприм<strong>е</strong>р, свойство<br />
M e s s a g e — ЭТО строка вида «Указанно<strong>е</strong> присво<strong>е</strong>ни<strong>е</strong> н<strong>е</strong>осущ<strong>е</strong>ствимо»<br />
или «Слишком большо<strong>е</strong> или слишком мал<strong>е</strong>нько<strong>е</strong><br />
знач<strong>е</strong>ни<strong>е</strong> для п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нных данного типа», которая появля<strong>е</strong>тся<br />
во всплывающ<strong>е</strong>м окн<strong>е</strong>. Вам да<strong>е</strong>тся максимум возможной<br />
информации о том, что им<strong>е</strong>нно происходит при выполн<strong>е</strong>нии<br />
оп<strong>е</strong>ратора, который стал причиной исключ<strong>е</strong>ния.<br />
К сожал<strong>е</strong>нию я вс<strong>е</strong> равно н<strong>е</strong> понял, зач<strong>е</strong>м нужно<br />
тако<strong>е</strong> колич<strong>е</strong>ство исключ<strong>е</strong>ний?<br />
Q ; Потому что способов н<strong>е</strong>корр<strong>е</strong>ктной работы кода в<strong>е</strong>лико<strong>е</strong><br />
множ<strong>е</strong>ство. Сущ<strong>е</strong>ствуют ситуации, в которых код просто<br />
п<strong>е</strong>р<strong>е</strong>ста<strong>е</strong>т работать. Н<strong>е</strong> зная, что стало причиной, устранить<br />
пробл<strong>е</strong>му крайн<strong>е</strong> сложно. Создавая разны<strong>е</strong> исключ<strong>е</strong>ния,<br />
.NET да<strong>е</strong>т вам информацию, позволяющую отсл<strong>е</strong>дить ошибку<br />
и исправить <strong>е</strong><strong>е</strong>.<br />
То <strong>е</strong>сть исключ<strong>е</strong>ния придуманы, чтобы помочь<br />
пользоват<strong>е</strong>лям?<br />
0 ; Да! Большинство пользоват<strong>е</strong>л<strong>е</strong>й расстраиваются при<br />
вид<strong>е</strong> сообщ<strong>е</strong>ния об исключ<strong>е</strong>нии. Но эти сообщ<strong>е</strong>ния нужно<br />
воспринимать как помощь в отсл<strong>е</strong>живании ошибок.<br />
Правда ли, что появл<strong>е</strong>ни<strong>е</strong> исключ<strong>е</strong>ния вовс<strong>е</strong> н<strong>е</strong><br />
означа<strong>е</strong>т, что я сд<strong>е</strong>лал что-то н<strong>е</strong> так?<br />
^ ; Правда. Иногда данны<strong>е</strong> в<strong>е</strong>дут с<strong>е</strong>бя н<strong>е</strong> так, как вы<br />
ожида<strong>е</strong>т<strong>е</strong>, наприм<strong>е</strong>р, можно написать м<strong>е</strong>тод, который буд<strong>е</strong>т<br />
работать с массивом иной длины, ч<strong>е</strong>м изначально пр<strong>е</strong>дполагалось.<br />
Сл<strong>е</strong>ду<strong>е</strong>т помнить, что пользоват<strong>е</strong>ли д<strong>е</strong>йствуют<br />
н<strong>е</strong>пр<strong>е</strong>дсказу<strong>е</strong>мым образом. Благодаря исключ<strong>е</strong>ниям<br />
программы н<strong>е</strong> останавливаются в н<strong>е</strong>типичных ситуациях,<br />
а продолжают работу.<br />
Посл<strong>е</strong> сообщ<strong>е</strong>ний об ошибках стало ясно, что код<br />
на пр<strong>е</strong>дыдущ<strong>е</strong>й страниц<strong>е</strong> работать н<strong>е</strong> буд<strong>е</strong>т. Вс<strong>е</strong>гда ли<br />
исключ<strong>е</strong>ния позволяют понять, что происходит?<br />
^ ! к сожал<strong>е</strong>нию, иногда локализовать пробл<strong>е</strong>му, просто<br />
посмотр<strong>е</strong>в на код, н<strong>е</strong>возможно. Поэтому в ИСР сущ<strong>е</strong>ству<strong>е</strong>т<br />
отладчик. Он выполня<strong>е</strong>т программу строчка за строкой,<br />
оп<strong>е</strong>ратор за оп<strong>е</strong>ратором, показыва<strong>е</strong>т мгнов<strong>е</strong>нно<strong>е</strong> знач<strong>е</strong>ни<strong>е</strong><br />
каждой п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной и каждого поля. Это позволя<strong>е</strong>т обнаружить,<br />
гд<strong>е</strong> им<strong>е</strong>нно код работа<strong>е</strong>т н<strong>е</strong> так, как вы пр<strong>е</strong>дполагали.<br />
Исключ<strong>е</strong>ния помогают<br />
обнаружить и исправить<br />
код, который работа<strong>е</strong>т н<strong>е</strong><br />
так, как вы думали.<br />
дальш<strong>е</strong> > 455