Обработка исключений

Press any key to continue

Вопросы:

1. Можно ли по сигнатуре объявления делегата определить сигнатуру функции, которую представляет делегат.

2. Какие ограничения накладываются на функции, которые может представлять многоадресный делегат?

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

4. Как объявляется событие?

5. Какова общепринятая сигнатура обработчика события?

6. Как осуществляется генерация события?

7. Каким образом обработчику события передается дополнительная информация о произошедшем событии?

8. Как осуществляется «подписка» на событие?

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

Обработка таких ошибок осуществляется с помощью исключений.

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

Для организации обработки ошибочных исключительных состояний программа обычно делится на три блока

1. Часть программы, в которой могут возникнуть, в зависимости от ситуации, серьезные ошибки. Этот блок помечается ключевым словом try, а сам код программы помещается в {}.

try

{

: //Код, в котором могут возникнуть ошибки

}

2. Блоки кода (их может быть несколько), для обработки ошибочных ситуаций

catch

{

: //Код для обработки исключений

}

3. Блок кода для освобождения занятых ресурсов или для других заключительных действий, которые должны обязательно выполниться после блока try – finally.

В общем виде это может выглядеть следующим образом:

try

{

: //Код в котором могут возникнуть ошибки

}

catch (тип1 е)

{

: //Код для обработки исключений типа 1

}

catch (тип2 е)

{

: //Код для обработки исключений типа 2

}

catch (тип3 е)

{

: //Код для обработки исключений типа 3

}

finally

{

:

}

Можно опустить finally.

catch – столько сколько нужно или ни одного в этом случае – делается это для того, чтобы обязательно обработался код finally.

Разрешается объявлять блок catch без спецификации исключения:

catch

{

: //Код для обработки

}

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

Поскольку блоки catch при возникновении исключения просматриваются сверху вниз, то блок обрабатывающий наиболее общие исключения должен находиться последним, а самые детализированные в начале. Это связано с тем, что любой тип данных может быть приведен к типу, от которого он был порожден. Все типы исключений в C# порождены от базового класса System.Exception. Поэтому, если блок catch(Exception е) находится в коде первым, то он будет перехватывать все типы исключений, а остальные блоки catch никогда работать не будут.

try - блок может иметь несколько точек выходов (например, множество return). finally в этом случае обеспечивает обязательное после try выполнение определенного блока кода.

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

Некоторые из этих свойств:

Message - текст о характере ошибки

Source - источник ошибки

StackTrace - трассировочная информация, позволяющая определить, например, строку кода, вызвавшую исключение.

Пример использования стандартного исключения:

using System;

namespace ConsoleApplication4

{

class Div

{

public static double fdv(double a,double b)

{

return(a/b);

}

}

class Class1

{

static void Main(string[] args)

{

try

{

Console.WriteLine("Введите делимое");

double m = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите делитель");

double n = Convert.ToDouble(Console.ReadLine());

double z = Div.fdv(m,n);

Console.WriteLine("Результат");

Console.WriteLine(z);

}

catch(FormatException e)

{

Console.WriteLine(e.Message);

Console.WriteLine(e.Source);

Console.WriteLine(e.StackTrace);

}

}

}

}

Результат работы программы:

Вариант без ошибок:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: