Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Второй пример обработки исключительной ситуации C#

Второй пример обработки исключительной ситуации C#

Второй пример обработки исключительной ситуации C#, Пример обработки исключительной ситуации C#, Обработка исключительной ситуации C#, Исключительная ситуация в C#, C# Полное руководство Герберт Шилдт, Язык программирования C#, C# полное руководство

Следует особо подчеркнуть, что весь код, выполняемый в блоке try, контролируется на предмет исключительных ситуаций, в том числе и тех, которые могут возникнуть в результате вызова метода из самого блока try. Исключение, генерируемое методом в блоке try, может быть перехвачено в том же блоке, если, конечно, этого не будет сделано в самом методе.
В качестве еще одного примера рассмотрим следующую программу, где в методе Main () помещается блок try. Из этого блока вызывается метод GenException (), в котором и генерируется исключение IndexOutOfRangeException. Это исключение не перехватывается методом GenException (). Но поскольку метод GenException () вызывается из блока try в методе Main (), то исключение перехватывается в блоке catch, связанном непосредственно с этим блоком try.

/* Исключение может быть сгенерировано одним методом
    и перехвачено другим. */

using System;

class ExcTest {
   // Сгенерировать исключение.
   public static void GenException() {
      int [ ] nums = new int[4];

      Console.WriteLine("До генерирования исключения.");

      // Сгенерировать исключение в связи с выходом
      // индекса за границы массива.
      for (int i=0; i < 10; i++) {
         nums[i] = i ;
         Console.WriteLine("nums[{0 }] : {1}", i, nums[i]);
      }

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

class ExcDemo2 {
   static void Main() {

      try {
         ExcTest.GenException();
      }
      catch (IndexOutOfRangeException) {
         // Перехватить исключение.
         Console.WriteLine("Индекс вышел за границы массива!");
      }
      Console.WriteLine("После блока перехвата исключения.");
   }
}


Выполнение этой программы дает такой же результат, как и в предыдущем примере:
   До генерирования исключения.
   nums[0]: 0
   nums[1]: 1
   nums[2]: 2
   nums[3]: 3
   Индекс вышел за границы массива!
   После блока перехвата исключения.

Как пояснялось выше, метод GenException () вызывается из блока try, и поэтому генерируемое им исключение перехватывается не в нем, а в блоке catch в методе Main (). Однако, если бы исключение перехватывалось в методе GenException (), оно не было бы вообще передано обратно методу Main ().