Исключения.

При вычислении выражений могут возникать ошибки, например переполнение, деление на 0. В C# есть механизм, который позволяет, обрабатывать подобные ошибки, и избегать аварийного завершения программы. Этот механизм называется механизмом обработки исключительных ситуаций (исключения). Если возникает ошибка, то система сигнализирует об этом, с помощью специального действия, который называется, генерированием исключения. Так как C# является ООЯ, то исключения являются классами, которые имеют общего предка Exception. Он определен в пространстве имен System. Механизм исключений предназначен, только для событий, которые могут произойти, в результате работы самой программы. Он не поддерживает ошибки оборудования или прерывания. Исключения возникают тогда когда некоторая часть программы не смогла сделать то что от нее требовалось, при этом другая часть программы может попытаться сделать что-нибудь иное. Исключения позволяют логически разделить вычислительный процесс на 2 части: обнаружение аварийной ситуации и ее обработка. Функция, которая обнаруживает ошибку, может не знать, что предпринимать для ее исправления, а использовать эту функцию код может знать, что делать, но не уметь определить место возникновения. Исключение генерирует либо среда выполнения, либо программист с помощью оператора throw. Исключения, которые генерируются средой, определены пространством System и являются потомками класса System.Exception. Исключения обнаруживаются и обрабатываются в операторе try.

Имя Описание
ArithmeticException Ошибка в арифмитических операциях
ArrayTypeMismachException Попытка сохранения в массиве, элементов несовместимого типа.
DivideByZeroException Деление на ноль
FormatException Попытка передать в метод аргумент не правильного формата
IndexOutOfRangeException Индекс массива выходит за границы диапазона.
InvalidCastException Ошибка преобразования типов
OutOfMemoryException Недостаточно памяти для создания нового объекта
OverFlowException Переполнение при выполнении арифметических операций
StackOverFlowException Переполнение стека

 

1) Контролируемый блок, в него включаются потенциально опасные операторы программы. Все функции прямо или косвенно вызываемого из блока, так же считаются ему принадлежащими.

2) Один или несколько обработчиков исключений, блоков catch. В которых описываются, как обрабатываются ошибки различных типов.

3) Блок завершения Finally, он выполняется независимо от того возникла ошибка или нет.

Синтаксис оператора try.

Try блок [блоки catch][блок finally]

Отсутствовать могут либо блоки catch, либо блок finally, но не оба одновременно. Обработка исключительных ситуаций реализуется следующим образом:

1) Обработка исключения начинается с появления ошибки. Функция или операция, в которой возникла ошибка, генерирует исключения.

2) Выполнение текущего блока прекращается. Отыскивается соответствующий обработчик исключения, и ему передается управление.

3) Выполняется блок Finally, если он присутствует.

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

5) Обработчики исключений начинается с ключевого слова catch, за которым в скобках следует тип обкатываемого исключения, существует 3 формы записи:

Catch (тип имя) {тело обработчика}

Catch (тип) {тело обработчика}

Catch {тело обработчика}

Первая форма применяется, когда имя параметра, используется в теле обработчика, для выполнения каких либо действий. Например, вывод информации об исключение.

Вторая форма не предполагает использование информации об исключении, играет роль только его тип.

Третья форма применяется для перехвата всех исключений.