Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Свойства исключений






Каждое исключение это объект либо класса System.Exception, либо производного от него. В классе Exception есть свойства, которые можно использовать при обработке исключений. Вот два из них:

Message – текстовое описание ситуации, при которой создано исключение;

Source – имя объекта или приложения, пославшего исключение.

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

х = 1e99999< ENTER>

произойдёт аварийное завершение программы с такой выдачей сообщения о необработанном исключении:

Необработанное исключение: System.OverflowException: Значение было недопустимо малым или недопустимо большим для Double.

Чтобы защитить программу от аварийного завершения при возникновении исключений этого типа, можно включить в неё ещё один обработчик исключений с заголовком:

catch (OverflowException)

Более общим решением является дополнение программы catch-инструкцией, настроенной на перехват всех исключений, относящихся к обработке арифметических данных ArithmeticException.

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

double x;

while (true)

{

try

{

Console.Write(" x = ");

x = double.Parse(Console.ReadLine());

Console.WriteLine(" res = " + x);

}

catch (FormatException ex)

{

Console.WriteLine(" ex.Message=" + ex.Message);

Console.WriteLine(" ex.Source=" + ex.Source);

continue;

}

catch (ArithmeticException ex)

{

Console.WriteLine(" ex.Message=" + ex.Message);

Console.WriteLine(" ex.Source=" + ex.Source);

continue;

}

break;

}

После блока try два обработчика. Второй перехватывает исключения типа ArithmeticException к которым относится и OverflowException. В каждом из обработчиков выводятся значения свойств Message и Source, а затем управление с помощью операторов continue передаётся следующей итерации цикла. Результаты выполнения программы могут быть такими:

х = 1e999< ENTER>

ex.Message=Значение было недопустимо малым или недопустимо большим для Double.

ex.Source=mscorlib

х = qwer< ENTER>

ех.Message=Входная строка имела неверный формат.

ex.Source=mscorlib

х = 4.0< ENTER>

ех.Message =Входная строка имела неверный формат.

ex.Source=mscorlib

х = 4, 0< ENTER>

res = 4

Обратите внимание, что сообщения (значения свойства Message) различны для разных типов исключений. Источник генерации исключений во всех примерах один - базовая библиотека Microsoft (mscorlib).

Примечание: При анализе исключения в catch-блоке полезно выводить значение выражения ex.toString(). В нём содержится информация как о самом исключении, так и о точке его генерации в коде программы






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.