Глава 9. Обработка исключительных ситуаций
199
* To change this template use Tools | Options | Coding |
* Edit Standard Headers. */
using System;
namespace app34_exeption
{
class Program
{
static void Main()
{
Console.WriteLine("Ввод строк длиной не более 5 " +
"символов");
int i = (Console.ReadLine().Length);
try
{
if (i > 5)
// Генерируем исключение
throw new Exception(); // OverflowException();
}
catch (Exception ex) // OverflowException
{
Console.WriteLine("Длина строки более 5 " +
"символов");
Console.WriteLine("Message = {0}", ex.Message);
Console.WriteLine("Source = {0}", ex.Source);
Console.WriteLine("StackTrace = {0}",
ex.StackTrace);
Console.WriteLine("TargetSite = {0}",
ex.TargetSite);
Console.WriteLine("HelpLink = {0}", ex.HelpLink);
}
Console.ReadLine();
}
}
}
Из рис. 9.2 мы видим, что появилась дополнительная информация по
возникшему исключению за счет вывода на экран свойств объекта
Exception
.
Свойство
Message
сообщает, какого типа возникло исключение.
Свойство
Source
указывает на источник возникновения исключения.
200
Часть II. Объектно-ориентированное программирование
Рис. 9.2.
Уточнение причин возникновения исключения с помощью членов
класса
Exception
Свойство
StackTrace
уточняет источник возникновения исключения:
дело в том, что при работе программы могли вызываться функции
"в глубину", данные о каждом вызове которых запоминаются в сте-
ке программы. Рассматриваемое свойство дает "трассировку" (про-
смотр пути по стеку) стека и в конечном итоге показывает номер
строки текста той функции, в которой возникло исключение.
Свойство
TargetSite
указывает по-крупному источник возникнове-
ния исключения. В нашем случае это
Main()
.
Свойство
HelpLink
позволяет указать конкретный URL-адрес, где
можно получить более детальную информацию о возникшем исклю-
чении. По умолчанию значение этого свойства — пустая строка. Но
можно самому задать конкретный адрес. Самый простой способ —
в блоке
catch
первой строкой записать
ex.HelpLink = "URL-адрес";
.
Можно создать свой класс из класса
Exception
и в его конструкторе
добавить нужную инициализацию свойства
HelpLink
.
Блок
finally
Иногда требуется определить участок программы, который будет вы-
полняться после выхода из блока
try...catch
. Например, исключитель-
ная ситуация возникла в связи с ошибкой, приводящей к преждевремен-
ному возврату из текущего метода. Но в этом методе мог быть открыт
файл, который нужно закрыть, или же установлено сетевое соединение,
требующее разрыва. Подобные ситуации нередки в программировании,
и поэтому для их разрешения в C# предусмотрен удобный способ: вос-
пользоваться блоком
finally
.
Использование блока
finally
гарантирует, что некоторый набор опера-
торов будет выполняться всегда, независимо от того, возникло исклю-
чение (любого типа) или нет. Для того чтобы задать участок программы,
Do'stlaringiz bilan baham: |