Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Последнее обновление: 31.10.2015



Иногда при выполнении программы возникают ошибки, которые трудно предусмотреть или предвидеть, а иногда и вовсе невозможно. Например, при передачи файла по сети может неожиданно оборваться сетевое подключение. такие ситуации называются исключениями. Язык C# предоставляет разработчикам возможности для обработки таких ситуаций. Для этого в C# предназначена конструкция try...catch...finally. При возникновении исключения среда CLR ищет блок catch, который может обработать данное исключение. Если такого блока не найдено, то пользователю отображается сообщение о необработанном исключении, а дальнейшее выполнение программы останавливается. И чтобы подобной остановки не произошло, и надо использовать блок try..catch. Например:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 static void Main(string[] args) { int[] a = new int[4]; try { a[5] = 4; // тут возникнет исключение, так как у нас в массиве только 4 элемента Console.WriteLine("Завершение блока try"); } catch (Exception ex) { Console.WriteLine("Ошибка: " + ex.Message); } finally { Console.WriteLine("Блок finally"); } Console.ReadLine(); }

При использовании блока try...catch..finally вначале выполняются все инструкции между операторами try и catch. Если между этими операторами вдруг возникает исключение, то обычный порядок выполнения останавливается и переходит к инструкции сatch. В данном случае у нас явно возникнет исключение в блоке try, так как мы пытаемся присвоить значение шестому элементу массива в то время, как в массиве всего 4 элемента. И дойдя до строки a[5] = 4;, выполнение программы остановится и перейдет к блоку catch

Инструкция catch имеет следующий синтаксис: catch (тип_исключения имя_переменной). В нашем случае объявляется переменная ex, которая имеет тип Exception. Но если возникшее исключение не является исключением типа, указанного в инструкции сatch, то оно не обрабатывается, а программа просто зависает или выбрасывает сообщение об ошибке.

Однако так как тип Exception является базовым классом для всех исключений, то выражение catch (Exception ex) будет обрабатывать практически все исключения. Вся обработка исключения в нашем случае сводится к выводу на консоль сообщении об исключении, которое в свойстве message класса Exception.

Далее в любом случае выполняется блок finally. Однако этот блок необязательный, и его можно при обработке исключений опускать. Если же в ходе программы исключений не возникнет, то программа не будет выполнять блок catch, сразу перейдет к блоку finally, если он имеется.

Обработка нескольких исключений

При необходимости мы можем разграничить обработку различных типов исключений, включив дополнительные блоки catch:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { try {   } catch (FileNotFoundException e) { // Обработка исключения, возникшего при отсутствии файла } catch (IOException e) { // Обработка исключений ввода-вывода } Console.ReadLine(); }

Если у нас возникает исключение определенного типа, то оно переходит к соответствующему блоку catch.

При этом более частные исключения следует помещать в начале, и только потом более общие классы исключений. Например, сначала обрабатывается исключение IOException, и только потом Exception (так как IOException наследуется от класса Exception).

Оператор throw

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


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 226; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.008 с.)
Главная | Случайная страница | Обратная связь