На этом шаге мы рассмотрим средства преднамеренной генерации исключений.
Исключения можно генерировать преднамеренно. Речь идет не о том, чтобы написать команду, выполнение которой приводит к ошибке. Речь идет об использовании специальной инструкции, выполнение которой имеет такие же последствия, как и возникновение ошибки.
Сгенерировать исключение достаточно просто. Для этого используют инструкцию throw, после которой указывается объект исключения. Объект исключения можно создать в явном виде (то есть так, как создаются объекты обычных классов). Также в catch-блоке можно воспользоваться объектом, созданным автоматически при возникновении реальной ошибки (повторная генерация исключения). Правда исключение, перехваченное в catch-блоке, может быть сгенерировано повторно и более простым способом. Для этого используют инструкцию throw, не указывая явно объект исключения.
В примере ниже представлена программа, в которой искусственно генерируются исключения.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr225_1 { // Класс с главным методом: class Program { // Главный метод: static void Main() { // Внешний try-блок: try { // Внутренний try-блок: try { Console.WriteLine("Ceйчac будет ошибка..."); // Генерация исключения: throw new ArithmeticException("Какая-то ошибка"); } // Перехват исключения во внутреннем блоке: catch (ArithmeticException e) { Console.WriteLine(e.Message); // Повторное генерирование исключения: throw; } } // Перехват исключения во внешнем блоке: catch (ArithmeticException e) { Console.WriteLine("Еще раз: \"{0}\"", e.Message); } // Задержка: Console.ReadLine(); } } }
Результат выполнения программы представлен ниже:
Рис.1. Результат выполнения программы
В этой программе используются вложенные try-блоки. Во внутреннем try-блоке после выполнения команды
Console.WriteLine("Ceйчac будет ошибка...");
new ArithmeticException("Какая-то ошибка");
Перехват сгенерированного исключения выполняется во внутреннем catch-блоке. Там командой
Console.WriteLine(e.Message);
Механизм искусственной генерации исключений используется в самых разных ситуациях (например, для множественной обработки исключений) и позволяет значительно повысить гибкость программного кода.
На следующем шаге мы рассмотрим пользовательские классы исключений.