Console.WriteLine("nums[{0}]: {1}", i, nums[i]);

    }

    Console.WriteLine("He подлежит выводу");

  }

}

class UseExcept {

  static void Main() {

    try {

      ExcTest.GenException();

    }

    catch (IndexOutOfRangeException exc) {

      Console.WriteLine("Стандартное сообщение таково: ");

      Console.WriteLine(exc); // вызвать метод ToString()

      Console.WriteLine("Свойство StackTrace: " + exc.StackTrace);

      Console.WriteLine("Свойство Message: " + exc.Message);

      Console.WriteLine("Свойство TargetSite: " + exc.TargetSite);

    }

  Console.WriteLine("После блока перехвата исключения.");

  }

}

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

До генерирования исключения.

nums[0]: 0

nums[1]: 1

nums[2]: 2

nums[3]: 3

Стандартное сообщение таково: System.IndexOutOfRangeException: Индекс находился

вне границ массива.

    в ExcTest.genException() в <имя_файла>:строка 15

    в UseExcept.Main()в <имя_файла>:строка 29

Свойство StackTrace:  в ExcTest.genException()в <имя_файла>:строка 15

    в UseExcept.Main()в <имя_файла>:строка 29

Свойство Message:    Индекс    находился    вне    границ    массива.

Свойство TargetSite:    Void genException()

После блока перехвата исключения.

В классе Exception определяются четыре следующих конструктора:

public Exception()

public Exception(string сообщение)

public Exception(string сообщение, Exception внутреннее_исключение)

protected Exception(System.Runtime.Serialization.Serializationlnfo информация, System.Runtime.Serialization.StreamingContext контекст)

Первый конструктор используется по умолчанию. Во втором конструкторе указывается строка сообщение, связанная со свойством Message, которое имеет отношение к генерируемому исключению. В третьем конструкторе указывается так называемое внутреннее исключение. Этот конструктор используется в том случае, когда одно исключение порождает другое, причем внутреннее_исключение обозначает первое исключение, которое будет пустым, если внутреннее исключение отсутствует. (Если внутреннее исключение присутствует, то оно может быть получено из свойства InnerException, определяемого в классе Exception.) И последний конструктор обрабатывает исключения, происходящие дистанционно, и поэтому требует десериализации.

Следует также заметить, что в четвертом конструкторе класса Exception типы Serializationlnfo и StreamingContext относятся к пространству имен System. Runtime.Serialization.

Наиболее часто используемые исключения

В пространстве имен System определено несколько стандартных, встроенных исключений. Все эти исключения являются производными от класса SystemException, поскольку они генерируются системой CLR при появлении ошибки во время выполнения. В табл. 13.1 перечислены некоторые наиболее часто используемые стандартные исключения.

Таблица 13.1. Наиболее часто используемые исключения, определенные в пространстве имен System

Исключение                          Значение

ArrayTypeMismatchException - Тип сохраняемого значения несовместим с типом массива

DivideByZeroException - Попытка деления на нуль

IndexOutOfRangeException - Индекс оказался за границами массива

InvalidCastException - Неверно выполнено динамическое приведение типов

Перейти на страницу:

Похожие книги