Добавил:
2200 7008 9480 6099 TKFF БЛАГОДАРНОСТЬ МОЖНО ТУТ ОСТАВИТЬ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ 2025 / 4 курса_МТУСИ / 1 КУРС / Информатика / С# для чайников - Мюллер.pdf
Скачиваний:
0
Добавлен:
04.06.2025
Размер:
53.3 Mб
Скачать

)). Какие исключения я должен обрабатывать? Перехватывайте все исключения, для которых вы в состоянии восстановить нормальное состояние. Обязательно попытайтесь найти способ восстановления. В процессе разработки и тестирования необработанные исключе­ ния будут достигать верхушки вашей программы. Перед тем как передать программу пользователям, исправьте все случаи возмож­ ного возникновения необработанного исключения. Однако иногда исключение должно потребовать завершения программы, когда си­ туация безнадежна.

)) Как быть с исключениями, которые проскакивают через мою защиту? В разделе "Последний шанс перехвата исключения" ниже в этой главе рассказывается, как обеспечить перехват таких "парши­ вых овец':

)) Насколько надежным (безаварийным) должен быть мой код?

Если ваш код работает в системе управления движением воздушно­ го транспорта, он должен быть очень надежен. Если это утилита на один запуск, можно несколько расслабиться. . .

Советы по написанию кода с хорошей обработкой ошибок

п.

."....

.., ..,..

."....4

" ."..".-r

.б ..

,7L.

7

, ".-б7,.- ... .-

.".,

.-.

.."1.-..-..e

ж.".,

."1" .-. ."

."."

4 .

,7

.7., .".,..

))

Любой ценой защищайте пользовательские данные. Это самое главное. См. также следующий пункт.

)) Избегайте аварийного останова nроrраммы. Если это возможно,

постарайтесь восстановить функционирование программы, если нет, завершите ее как можно более "мягко". Не позволяйте вашей программе вдруг выдать пользователю нечто невразумительное и прекратить работу. Под мягко имеется в виду предоставление ясных сообщений о том, что произошло и как этого избежать в другой раз, а также закрытие программы с корректным освобождением ресур­ сов и сохранением пользовательских данных. Пользователи нена­ видят внезапные аварийные остановы программ.

)) Не позволяйте программе работать, если вы не можете восста­ новить ее нормальное состояние. Программа может оказаться в нестабильном состоянии, а пользовательские данные - несогласо­ ванными. Если возможности корректной обработки ситуации нет,

выводите соответствующее сообщение и немедленно завершайте программу вызовом System . Envirorunent . FailFast ( ) . Это не ава­

рия, а спланированная остановка.

ГЛАВА 9 Эти исключительные исключения 239

ч)>· Рассматривайте библиотеки классов и приложения по-разному.

.. , В библиотекахклассов позволяйте исключениям достигать вызыва­ ющего метода, который лучше знает, как справиться с возникшей проблемой. Не оставляйте вызывающий метод в неведении относи­ тельно того, что произошло. Но в приложении обрабатывайте все ис­ ключения, какие можете. Главное - чтобы код оставался как можно дольше работоспособным и защищал пользовательские данные без множества несущественных сообщений.

»Генерируйте исключения, есnи по какой-то причине метод не в

состоянии завершить выполнение своей задачи. Вызывающий метод должен знать о том, что возникла проблема (это может быть

1метод выше в стеке вызовов или некоторый метод в коде, написан­ ном другим программистом и использующим ваш код). Если при проверке корректности входных данных перед их использованием выясняется их непригодность - например, обнаруживается нео­ жиданное значение null, - по возможности исправьте ситуацию и продолжайте работу; в противном случае сгенерируйте исключение.

»Пытайтесь писать код, который не требует генерации исклю­ чений, исправляйте ошибки при их обнаружении, не полагаясь на

исключения. Но при необходимости сообщения об ошибках и их об­ работке как главный метод используйте исключения.

»Старайтесь не перехватывать исключения там, где вы не в со­ стоянии обработать их максимально корректно, предпочти-

,.,теnьно - с восстановлением работоспособности программы.

Перехват исключения, которое вы не в состоянии обработать, напо­ минает ловлю осы голой рукой. Большинство методов не содержат обработчики исключений.

>) Тщательно тестируйте свой код, в особенности дnя некор­ ректных входных данных. Может ли ваш метод работать с от­ рицательными входными данными? С нулем? С очень большими числами? С пустой строкой? Со значением null? Что еще может со­ творить пользователь, чтобы вызвать исключение? Какие ресурсы, способные привести к ошибкам, использует ваш код? Файлы, базы данных, URL? (См. два предыдущих пункта.)

·» Перехватывайте как можно боnее конкретные исключения. Не пишите слишком много саtсh-блоков для высокоуровневых классов исключений типа Exception или ApplicationException. Вы ри­

скуете не пропустить такие исключения вверх по цепочке вызовов.

»Всегда размещайте обработчик "последнего шанса" в методе

татн е оон иnи в ином месте "на вершине" программы (за ис­ ключением библиотек классов). В таком блоке можно перехва­ тить исключение Exception. Перехватывайте и обрабатывайте все

240 ЧАСТЬ 1 Основы программирования на С#

исключения по ходу работы программы, следнего шанса" перехват"отстающих': (См. перехвата исключения"далее в этой главе.)

предоставив блоку "по­ раздел "Последний шанс

»Не используйте исключения как часть обычного потока выпол­ нения. Например, не надо использовать исключения как способ вы­

хода из цикла или из метода.

»

 

у

м

ай

те

 

ан

ии

 

б т

 

е

нных

кла

сс

и

с

клю

 

ений, если

од

 

 

о созд

 

со

с

в

 

 

 

 

ч

 

 

 

 

 

 

 

 

 

 

ов

 

 

 

 

П

должны нести

с собой дополнительную информацию, которая

они

может помочь в отладке или предоставить пользователю более ос­

мысленное сообщение об ошибке.

 

 

 

 

 

 

 

длнимнияля пилнeкноа

импдиенмин м

дкя лкедомирая лсамедеррпн ломениневие

ямкяенля сиодек - ,RW":- К{­

КЛ(WК: Л-AW:К

яопти впе

 

сбта арлнсбнернпl реозeоданпе

одран алнопратон арРоснираа

:bWЛ-(WКллсимопроа-A

лалненп

ЗАПОМНИ!

cАПИОЕТОСЕЕТЕВЗЕТОВЕtВНВСИСB3ЕТИАОП3eВНИНООЕТОСЕВN МЕ1ЕМС3):

 

ЕТОTSЕТСОИВИАОП3eВЗ

..,.ВЗB ЗВЕТОВЗОB !ВЕТТОЕТСВЕТОМСЕТТВСВХМСЕТИTАН

 

DrЕ ВОП!НЕ ИХ

НИННМПН3ЕТАНeСАЕТT3ОЕТОСОSЕТtОИНЕТВСtВИАСОПСААС

ВООBЗВНЕТИСОМСЕТТСВВТОT

eЕТИЕТВПTНОТСИТОЗО..,.И ООЗЗВНЕТССИВПНМ

oВООBЗВНЕТСcИИl

 

Анализ возможных исключений метода

 

 

 

(---!.,(-

-.#.17t(3

-#.!.

С(.(#

(-..7>#)(1

!)

-!6#. F#)#,(,!-(.b

omp.-#.)( g.!.

-!S,!-

S#,-03 ch(F- -!2.()(( !2,(2!.>(.!-

(-..7>#

)(3

wф

0.

Вf o ф

 

 

 

 

 

 

 

 

 

w

 

 

 

 

ф

 

 

 

 

 

 

 

 

 

 

w

 

 

ф

 

 

 

 

 

 

 

фw

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

э.!

-#.!. S,#.-.(-.1#.

-!2!3

>(-.b

)#.!.!,!F!

 

 

.!.(и

S,#.)(2)(>#))!F!

..1

S!(-.(

..7>#-!F!

-.!-(

oe

rS

epS-

(3.#

(

--.(-.(

-.,!.(

S,#.-.(-.1r

7t#3

(-1 .!-S()(

(и - .(>#-.-#

S

#

.-(

(-#)(

 

S,!-.,()-.-(

 

(-#)

l.#.17

t(3

 

S,(-#, .#-!)-.

,(,1

# kF.#

!20>)!

)(m!.(.-1

 

-

(3.# lМa..7>#-!#

-.!-!

oe

 

rS

epS

 

 

 

 

 

 

 

 

 

 

 

 

ГЛАВА 9

Эти исключительные исключения 241

242 ЧАСТЬ 1 Основы программирования на С#

Соседние файлы в папке Информатика