Свойство | Описание |
---|---|
Data | Добавлено в .NET 2.0. Предлагает коллекцию пар ключей и значений (пред-cтавленную объектом, реализующим IDictionary), которая обеспечивает дополнительную пользовательскую информацию о данном исключении. По умолчанию эта коллекция является пустой |
HelpLink | Возвращает адрес URL файла справки с описанием ошибки во всех подробностях |
InnerException | Доступно только для чтения. Может использоваться для получения информации о предыдущем исключении или исключениях, ставших причиной данного исключения. Запись предыдущих Исключений осуществляется путем передачи их конструктору самого последнего исключения |
Message | Доступно только для чтения. Возвращает текстовое описание данной ошибки. Само сообщение об ошибке задается, как параметр конструктора |
Source | Возвращает имя компоновочного блока, генерирующего исключение |
StackTrace | Доступно только для чтения. Содержит строку, идентифицирующую последовательность вызовов, которые привели к исключительной ситуации. Как вы можете догадаться сами, это свойство оказывается очень полезным для отладки |
TargetSite | Доступно только для чтения. Возвращает тип MethodBase, предлагающий самую разную информацию о методе, который генерировал исключение (ToString будет идентифицировать имя соответствующего метода) |
Простейший пример
Чтобы продемонстрировать "пользу" структурированной обработки исключений, нужно создать тип, который в подходящем окружении может генерировать исключение. Предположим, что мы создали новое консольное приложение с именeм SimpleException, в котором определяются два типа класса Car (автомобиль) и Radio (радио), связанные отношением локализации ("has-a"). Тип Radio определяет один метод, включающий и выключающий радио.
public class Radio {
public void TurnOn(bool on) {
if (on) Console.WriteLine("Радиопомехи…");
else Console.WriteLine ("И тишина…");
}
}
В дополнение к использованию типа Radio в рамках модели локализации/делегирования, тип Car определяет следующее поведение. Если пользователь объекта Car превысит предел для скорости (этот предел задается значением соответствующего члена-константы), то "двигатель взрывается" и объект Car становится непригодным для использования, что выражается в соответствующем изменении значения члена-переменной типа bool с именем carIsDead (автомобиль разрушен). Кроме того, тип Car имеет несколько членов-переменных, представляющих текущую скорость и "ласкательное имя", данное автомобилю пользователем, а также несколько конструкторов. Вот полное определение этого типа (с соответствующими примечаниями).
public class Car {
// Константа для максимума скорости.
public const int maxSpeed = 100;
// Данные внутреннего состояния.
private int currSpeed;
private string petName;
// Работает ли этот автомобиль?
private bool carIsDead;
// В автомобиле есть радио.
private Radio theMusicBox = new Radio;
// Конструкторы.
public Car {}
public Car(string name, int currSp) {
currSpeed = currSp;
petName = name;
}
public void CrankTunes(bool state) {
// Запрос делегата для внутреннего объекта.
theMusicBox.TurnOn(state);
} // He перегрелся ли автомобиль?