C#. Обработка исключений и блок finally
Блок finally
В этой статье я хочу рассказать об использовании ключевого слова finally в программах, написанных на C#. Тема данной статьи касается вопроса обработки исключительных ситуаций, и уже затрагивалась в уроках базового курса (Урок № 12. Обработка ошибок, Урок №14. Детализация при обработке ошибок), но сегодня я расскажу о еще одном инструменте из этой области. В упомянутых выше уроках, я описывал подход к обработке ошибок, в соответствии с которым, код разделялся на два блока. В одном находился потенциально опасный код, а в другом — код обработки, возникших ошибок. Схематично это выглядит примерно так:
try { //Потенциально опасный блок кода }catch(тип_ошибок) { //Обработка ошибок } //Дальнейшие операторы программы
Таким образом, если в блоке try, происходит ошибка (исключительная ситуация), то его выполнение прерывается и управление передается в блок catch. Если же в блоке try не возникают ошибки, то блок catch пропускается и выполнение следующий за ним оператор. А на практике, бывает необходимо выполнить некий код вне зависимости от того, происходили в потенциально опасном блоке ошибки или нет.
Очевидно, что в блоке catch такой код размещать нельзя, так как блок catch может не выполниться вообще (если не было ошибок в блоке try). Блок try для этого тоже не подходит, так как он может не выполниться до конца, и нет гарантии, что важные операторы будут выполнены. Вот для этих целей предусмотрен блок блок finally, операторы этого блока будут выполнены вне зависимости от того, происходили ошибки в блоке try и выполнялся ли блок catch.
Примером может быть такой случай, в блоке try на мы открываем файл, вычитываем из него данные, и если происходит какая-нибудь ошибка, блок try прерывается и управление переходит в блок catch. И когда же нам закрывать файл? В конце блока try нельзя (при возникновении ошибки, этот код не выполнится), в блоке catch тоже нельзя, так как в случае успешного выполнения блока try, блок catch будет пропущен. Вот тут и приходит на помощь блок finally, в нем мы и будем закрывать файл.
Схематично, использование блока finally выглядит так:
try { //Потенциально опасный блок кода } catch (тип_ошибок) { //Обработка ошибок } finally { //Этот блок выполнится в любом случае }
Вот так всё просто, с блоком finally мы получаем гарантию того, что важнейшие операторы программы выполнятся в любом случае (были ли ошибки во время выполнения блока try, или нет).
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.