Класс Exception
Все определяемые на уровне пользователя и системы исключения в конечном итоге всегда наследуются от базового класса System.Exception, который, в свою очередь, наследуется от класса System.Object. Ниже показано, как в целом выглядит этот класс (обратите внимание, что некоторые его члены являются виртуальными и, следовательно, могут переопределяться в производных классах):
public class Exception : ISerializable, _Exception { // Общедоступные конструкторы public Exception(string message, Exception innerException); public Exception(string message); public Exception(); ... // Методы public virtual Exception GetBaseException() ; public virtual void GetObjectData(Serializationlnfо info, StreamingContext context); // Свойства public virtual IDictionary Data { get; } public virtual string HelpLink { get; set; } public Exception InnerException { get; } public virtual string Message { get; } public virtual string Source { get; set; } public virtual string StackTrace { get; } public MethodBase TargetSite { get; } ... }
Нетрудно заметить, что многие из содержащихся в System.Exception свойств являются по своей природе доступными только для чтения. Это объясняется тем, что для каждого из них значения, используемые по умолчанию, обычно поставляются в производных классах. Например, в производном классе IndexOutOfRangeException поставляется сообщение по умолчанию "Index was outside the bounds of the array" ("Индекс вышел за границы массива").
В следующей таблице приведено краткое описание некоторых наиболее важных свойств класса System.Exception:
Свойства класса Exception
Свойство | Описание |
---|---|
Data | Это свойство, доступное только для чтения, позволяет извлекать коллекцию пар "ключ/значение" (представленную объектом, реализующим интерфейс IDictionary), которая предоставляет дополнительную, определяемую программистом, информацию об исключении. По умолчанию эта коллекция является пустой. |
HelpLink | Это свойство позволяет получать или устанавливать URL-адрес, по которому доступен справочный файл или веб-сайт с детальным описанием ошибки. |
InnerException | Это свойство, доступное только для чтения, может применяться для получения информации о предыдущем исключении или исключениях, которые послужили причиной возникновения текущего исключения. Запись предыдущих исключений осуществляется путем их передачи конструктору самого последнего исключения. |
Message | Это свойство, доступное только для чтения, возвращает текстовое описание соответствующей ошибки. Само сообщение об ошибке задается в передаваемом конструктору параметре. |
Source | Это свойство позволяет получать или устанавливать имя сборки или объекта, который привел к выдаче исключения. |
StackTrace | Это свойство, доступное только для чтения, содержит строку с описанием последовательности вызовов, которая привела к возникновению исключения. Как нетрудно догадаться, это свойство очень полезно во время отладки или для сохранения информации об ошибке во внешнем журнале ошибок. |
TargetSite | Это свойство, доступное только для чтения, возвращает объект MethodBase с описанием многочисленных деталей метода, который привел к выдаче исключения (вызов вместе с ним ToString() позволяет идентифицировать этот метод по имени) |
Давайте рассмотрим пример:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static int MyDel(int x, int y) { return x / y; } static void Main() { link1: try { Console.Write("Введите x: "); int x = int.Parse(Console.ReadLine()); Console.Write("Введите y: "); int y = int.Parse(Console.ReadLine()); int result = MyDel(x, y); Console.WriteLine("Результат: " + result); } // Обрабатываем исключение возникающее при делении на ноль catch (DivideByZeroException ex) { Console.WriteLine("Деление на 0 detected!!!\n"); Console.WriteLine("ОШИБКА: " + ex.Message + "\n\n"); goto link1; } // Обрабатываем исключение при некорректном вводе числа в консоль catch (FormatException ex) { Console.WriteLine("Это НЕ число!!!\n"); Console.WriteLine("ОШИБКА: " + ex.Message + "\n\n"); goto link1; } Console.ReadLine(); } } }
Как видите в данном примере используется свойство Message, класса Exception, для вывода информации о возникшем исключении. Более подробно свойства класса Exception рассматриваются в следующей статье.
Комментарии