14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

КЛЮЧЕВЫЕ<br />

МОМЕНТЫ<br />

Причиной исключ<strong>е</strong>ния мож<strong>е</strong>т стать любой оп<strong>е</strong>ратор.<br />

Для обработки исключ<strong>е</strong>ний пользуйт<strong>е</strong>сь блоком<br />

try/catch. Н<strong>е</strong>обработанны<strong>е</strong> исключ<strong>е</strong>ния приводят<br />

к пр<strong>е</strong>кращ<strong>е</strong>нию работы программы.<br />

Обнаруж<strong>е</strong>ни<strong>е</strong> исключ<strong>е</strong>ния в блок<strong>е</strong> try приводит<br />

к н<strong>е</strong>м<strong>е</strong>дл<strong>е</strong>нной п<strong>е</strong>р<strong>е</strong>дач<strong>е</strong> управл<strong>е</strong>ния п<strong>е</strong>рвому оп<strong>е</strong>ратору<br />

блока catch.<br />

Объ<strong>е</strong>кт Exception сод<strong>е</strong>ржит информацию об<br />

исключ<strong>е</strong>нии. Объявив п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нную Exception<br />

в оп<strong>е</strong>ратор<strong>е</strong> catch, вы получа<strong>е</strong>т<strong>е</strong> доступ к информации<br />

об исключ<strong>е</strong>нии, появивш<strong>е</strong>мся в блок<strong>е</strong> try:<br />

try {<br />

// оп<strong>е</strong>раторы, которы<strong>е</strong> могут<br />

// вызвать исключ<strong>е</strong>ни<strong>е</strong><br />

} catch (lOException ex) {<br />

// информация об исключ<strong>е</strong>нии<br />

// сод<strong>е</strong>ржится в п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной <strong>е</strong>х<br />

}<br />

Сущ<strong>е</strong>ствуют различны<strong>е</strong> типы исключ<strong>е</strong>ний. Каждому<br />

соотв<strong>е</strong>тству<strong>е</strong>т объ<strong>е</strong>кт, унасл<strong>е</strong>дованный от класса<br />

Exception. Старайт<strong>е</strong>сь изб<strong>е</strong>гать обнаруж<strong>е</strong>ния<br />

исключ<strong>е</strong>ний «вообщ<strong>е</strong>», работайт<strong>е</strong> с исключ<strong>е</strong>ниями<br />

опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>нного типа.<br />

обработка исключ<strong>е</strong>ний<br />

Каждому оп<strong>е</strong>ратору try мож<strong>е</strong>т соотв<strong>е</strong>тствовать<br />

н<strong>е</strong>сколько оп<strong>е</strong>раторов catch:<br />

try { ... }<br />

catch (NullReferenceException ex) {<br />

// эти оп<strong>е</strong>раторы срабатывают при<br />

// NullReferenceException<br />

}<br />

catch (OverflowException ex) { ... }<br />

catch (FileNotFoundException) { ... }<br />

catch (ArgumentException) { ... }<br />

Для сообщ<strong>е</strong>ния об анамальных ситуациях использу<strong>е</strong>тся<br />

оп<strong>е</strong>ратор throw:<br />

throw new Exception ("Сообщ<strong>е</strong>ни<strong>е</strong>");<br />

Оп<strong>е</strong>ратор throw позволя<strong>е</strong>т повторно вызвать п<strong>е</strong>р<strong>е</strong>хвач<strong>е</strong>нно<strong>е</strong><br />

искпюч<strong>е</strong>ни<strong>е</strong>, но только внутри блока catch.<br />

Насл<strong>е</strong>довани<strong>е</strong>м от класса Exception можно<br />

создать пользоват<strong>е</strong>льско<strong>е</strong> исключ<strong>е</strong>ни<strong>е</strong>.<br />

class CustomException : Exception;<br />

В большинств<strong>е</strong> случа<strong>е</strong>в достаточно встро<strong>е</strong>нных<br />

исключ<strong>е</strong>ний .NET. Приб<strong>е</strong>гая к различным типам<br />

исключ<strong>е</strong>ний, вы пр<strong>е</strong>доставля<strong>е</strong>т<strong>е</strong> больш<strong>е</strong> информации<br />

пользоват<strong>е</strong>лю.<br />

Оп<strong>е</strong>ратор using как комбинация<br />

оп<strong>е</strong>раторов try и finally<br />

Объявляя ссылку внутри оп<strong>е</strong>ратора<br />

usin^j вы автоматич<strong>е</strong>ски вызыва<strong>е</strong>т<strong>е</strong><br />

в конц<strong>е</strong> блока оп<strong>е</strong>раторов м<strong>е</strong>тод<br />

DisposeQ.<br />

Вы уж<strong>е</strong> зна<strong>е</strong>т<strong>е</strong>, что оп<strong>е</strong>ратор u s in g гарантиру<strong>е</strong>т<br />

закрыти<strong>е</strong> ваших файлов. 1^1ногда он мож<strong>е</strong>т использоваться<br />

и как б ы с т р ы й в ы з о в для оп<strong>е</strong>раторов<br />

try и finally!<br />

u s i n g<br />

( Y o u r C l a s s с<br />

/ / код<br />

= n e w Y o u r C l a s s 0 ) {<br />

аналогично ^<br />

Y o u r C la ss с = new Y o u r C la s s О ;<br />

t r y {<br />

При вызов<strong>е</strong> м <strong>е</strong>т о-<br />

T>.,-NT (j/2 Г)/СЬолглА й S . ^ . .<br />

/ / и илок<strong>е</strong><br />

rinaliy можно ис-<br />

} f i n a l l y { j пользовать сокра-<br />

'/ц<strong>е</strong>нную запись с<br />

с .D is p o s e 0 ; ^оп<strong>е</strong>ратором using.<br />

}<br />

}<br />

дальш<strong>е</strong> > 481

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

Saved successfully!

Ooh no, something went wrong!