Главная » C# » Обработка некритических ошибок в Visual C# (Sharp)

0

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

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

отсутствия конфигурационного файла может быть использование действия по умолчанию. В данном примере таким действием может быть вывод диалогового окна, в котором пользователю предлагается выбрать необходимый конфигурацнный файл, или же  программа могла бы сама создать такой файл с установками по умолчанию. Образец кода для создания такого файла показан в следующем фрагменте кода:

try {

LoadConfiguration();

}

catch (ConfigurationException ex) { CreateDefaultConfiguration();

}

В данном коде метод LoadConf iguration () защищен операторами try/catch, но блок catch перехватывает ТОЛЬКО исключения типа ConfigurationException (встроенное исключение С#). Таким образом, если происходит исключение типа ConfigurationException, то создается конфигурационный файл по умолчанию, что позволит программе продолжить исполнение. Если в методе LoadConf iguration () произойдет исключение другого типа, то оно будет отфильтровано для обработки каким-либо обработчиком более высокого уровня.

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

Советы разработчику

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

•    В программах всегда происходят ошибки и исключения.

•    Код  программ  организован  подобно управленческой  иерархии.  Иерархия  кода содержит два типа кода: организационный код и реализующий код.

•    Исключения перехватываются с помощью блоков кода try и catch.

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

•    Ответственность  за  выбрасывание  исключений  лежит  на  реализующем, коде.

Реализующий код не пытается обработать или подавить исключение. Это ознает, что реализующий код содержит блок  finally для сбрасывания состояния в первоначальное, но обычно не содержит блока catch.

П Организационный код должен иметь в виду возможность возникновения исклений. Это означает, что организационный код реализует блоки catch для первата и обработки исключений» Обычно этот код не содержит блока finally, но может фильтровать исключения.

•    Исключения фильтруются, чтобы определить, какие из них перехватывать, а кие нет.

•    Код можно защитить от исключений с помощью песочницы.

•    Реализуйте для вашего кода состояние по умолчанию, чтобы сделать его удобитаемым и легко обслуживаемым.

•    Код, в котором обрабатываются некритические ошибки, обычно является оргизационным кодом и используется для исправления исключений.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии