Оператор throw

До сих пор мы рассматривали исключения, которые генерирует среда выпол­нения С#, но это может сделать и сам программист. Для генерации исключе­ния используется оператор throw с параметром, определяющим вид исключе­ния. Параметр должен быть объектом, порожденным от стандартного класса System. Exception. Этот объект используется для передачи информации об исклю­чении его обработчику.

Оператор throw употребляется либо с параметром, либо без него:

throw [ выражение ];

Форма без параметра применяется только внутри блока catch для повторной ге­нерации исключения. Тип выражения, стоящего после throw, определяет тип ис­ключения, например:

throw new DivideByZeroException();

Здесь после слова throw записано выражение, создающее объект стандартного класса «ошибка при делении на 0» с помощью операции new.

При генерации исключения выполнение текущего блока прекращается и проис­ходит поиск соответствующего обработчика с передачей ему управления. Обра­ботчик считается найденным, если тип объекта, указанного после throw, либо тот же, что задан в параметре catch, либо является производным от него. Рассмотрим пример, приведенный в спецификации С#:

using System;

class Test

{

static void F()

{

try

{

G(); // функция, в которой может произойти исключение

}

catch (Exception e)

{

Console.WriteLine("Exception in F: " + e.Message);

e = new Exception("F");

throw; // повторная генерация исключения

}

}

static void G()

{

throw new Exception("G"); // моделирование исключительной ситуации

}

static void Main()

{

try

{

F();

}

catch (Exception e)

{

Console.WriteLine("Exception in Main: " + e.Message);

}

}

}

В методе F выполняется промежуточная обработка исключения, которая заклю­чается в том, что на консоль выводится поле Message перехваченного объекта е (об элементах класса Exception рассказывается в следующем разделе). После этого исключение генерируется заново. Несмотря на то что в обработчике исключения создается новый объект класса Exception с измененной строкой информации, передаваемой в исключении, выбрасывается не этот объект, а тот, который был перехвачен обработчиком, поэтому результат работы программы следующий:

Exception in F: G

Exception in Main: G

Заменим оператор throw таким оператором;

throw e;

В этом случае в обработчике будет выброшено исключение, созданное в преды­дущем операторе, и вывод программы изменится:

Exception in F: G

Exception in Main: F

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: