Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

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

Каждое исключение это объект либо класса System.Exception, либо

производного от него. В классе Exception есть свойства, которые можно

использовать при обработке исключений. Вот два из них:

Message "свойство: Message" – текстовое описание ситуации, при которой

создано исключение;

Source

"свойство: Source"

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

исключение.

Прежде чем привести пример использования этих свойств, ещё раз обратимся

к предыдущей программе, где использована catch-инструкция для FormatException.

Если пользователь введёт синтаксически правильное числовое значение, которое

выходит из диапазона представимых в системе чисел, то возникает ситуация, при

которой будет сгенерировано исключение, отличное от FormatException. Например,

в результате ввода:

x = 1e999<ENTER>

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

необработанном исключении:

Необработанное исключение: System.OverflowException:

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

Чтобы защитить программу

от аварийного завершения при возникновении

исключений этого типа, можно включить в неё ещё один обработчик исключений с

заголовком:

catch (OverflowException)

Более общим решением является дополнение программы catch–инструкцией,

настроенной на перехват всех исключений типа ArithmeticException, относящихся к

обработке арифметических данных.

Чтобы получить доступ к свойствам перехваченного исключения, необходимо

в заголовке catch-инструкции вслед за типом исключения поместить имя, которое

будет представлять исключение в блоке обработки. Предыдущая программа с

учётом сказанного может быть такой

:

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;

}

После блока try два обработчика. Второй перехватывает исключения типа

ArithmeticException к которым относится и OverflowException. В каждом из

обработчиков выводятся значения свойств Message и Source, а затем управление с

помощью операторов continue передаётся следующей итерации цикла. Результаты

выполнения программы могут быть такими:

x = 1e999<ENTER>

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

недопустимо большим для Double.

ex.Source=mscorlib

x = qwer<ENTER>

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

ex.Source=mscorlib

x = 4.0<ENTER>

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

ex.Source=mscorlib

x = 4,0<ENTER>

res = 4

Обратите внимание, что сообщения (значения свойства Message) различны для

разных типов исключений. Источник генерации исключений во всех примерах один

– базовая библиотека Microsoft (mscorlib).

Примечание: При анализе исключения в catch-блоке полезно выводить

значение выражения ex.ToString(). В нём содержится информация как о самом

исключении, так и о точке его генерации в коде программы

Соседние файлы в папке CSBasicCourse2ndedPodbelsky