Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основы работы с исключениями

Поиск

 

Принимая во внимание, что .NET Framework включает большое количество предопределенных классов исключений, возникает вопрос: как их использовать в коде для перехвата ошибочных условий? Для того чтобы справиться с возможными ошибочными ситуациями в коде С#, программа обычно делится на блоки трех разных типов:

  • Блоки try инкапсулируют код, формирующий часть нормальных действий программы, которые потенциально могут столкнуться с серьезными ошибочными ситуациями.
  • Блоки catch инкапсулируют код, который обрабатывает ошибочные ситуации, происходящие в коде блока try. Это также удобное место для протоколирования ошибок.
  • Блоки finally инкапсулируют код, очищающий любые ресурсы или выполняющий другие действия, которые обычно нужно выполнить в конце блоков try или catch. Важно понимать, что этот блок выполняется независимо от того, сгенерировано исключение или нет.

 

Блок try-catch

 

Основу обработки исключительных ситуаций в С# составляет пара ключевых слов try и catch. Эти ключевые слова действуют совместно и не могут быть использованы порознь. Ниже приведена общая форма определения блоков try-catch для обработки исключительных ситуаций:

 

try

{

// Блок кода, проверяемый на наличие ошибок

}

catch (ExceptTypel exOb)

{

// Обработчик исключения типа ExceptTypel

// exOb.Message будет содержать текст исключения

)

catch (ExceptType2 exOb)

{

// Обработчик исключения типа ExceptType2

// exOb.Message будет содержать текст исключения

}

 

Где ExceptType — это тип возникающей исключительной ситуации. Когда исключение генерируется оператором try, оно перехватывается составляющим ему пару оператором catch, который затем обрабатывает это исключение. В зависимости от типа исключения выполняется и соответствующий оператор catch. Так, если типы генерируемого исключения и того, что указывается в операторе catch, совпадают, то выполняется именно этот оператор, а все остальные пропускаются. Когда исключение перехватывается, переменная исключения exOb получает свое значение. На самом деле указывать переменную exOb необязательно. Так, её необязательно указывать, если обработчику исключений не требуется доступ к объекту исключения, что бывает довольно часто. Для обработки исключения достаточно и его типа.

Следует, однако, иметь в виду, что если исключение не генерируется, то блок оператора try завершается как обычно, и все его операторы catch пропускаются. Выполнение программы возобновляется с первого оператора, следующего после завершающего оператора catch. Таким образом, оператор catch выполняется лишь в том случае, если генерируется исключение. Пустой оператор catch без параметра ловит все возможные ошибки.

 

Давайте рассмотрим пример, в котором будем обрабатывать исключение, возникающее при делении числа на 0:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

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)

{

Console.WriteLine("Деление на \"0\" зафиксировано\n");

goto link1;

}

// Обрабатываем исключение при некорректном вводе числа в консоль

catch (FormatException)

{

Console.WriteLine("Было введено не число\n");

goto link1;

}

Console.WriteLine("Для продолжения нажмите любую клавишу...");

Console.ReadKey();

}

}

}

 

Рис. 2. 1. Результат работы кода выше

 

Данный простой пример наглядно иллюстрирует обработку исключительной ситуации при делении на «0» (DivideByZeroException), а так же пользовательскую ошибку при вводе не числа (FormatException).



Поделиться:


Последнее изменение этой страницы: 2016-12-28; просмотров: 275; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.175.191 (0.005 с.)