14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем 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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!