Традиционные способы обработки ошибок
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Понятие «Структурная об­работка исключений».

 

Многие системные функ­ции возвращают значение, указывающее на успешное или безуспешное выполнение функции. Однако такой способ извещения программы имеет ряд недостатков:

• Во-первых, программист обязан выполнять все проверки воз­вращаемого значения и либо реагировать на ошибки, либо передавать их на более высокий уровень программы. Если на одном из уровней проверка не про­водится, то ошибки могут повлиять на другие части программы.

• Во-вторых, текст программы загромождается операторами if...else, обрабатывающими нетипич­ные случаи.

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

 

Для доступа прикладных программ к информации о возникшем исключении в Windows (начиная с NT) разработан специальный механизм, называемый структурной обработкой исключений.

 Исключительная ситуация (или исключение) — это ошибка, которая возникает во время выполнения программы.

Структурная об­работка исключений — это метод, применяемый Windows для обработки как программных, так и внутренних аппаратных исключений.

Средство обработки исключений Windows не зависит от используемого языка программирования: один и тот же механизм используется для всех языков.

Каждый язык определяет, каким образом в нем реализуется этот механизм.

 

2. Организация обработки исключений в С#

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

В этом случае не обязательно проверять результат выполнения ка­ждой конкретной операции или метода вручную.

 

Программные инструкции, которые нужно проконтролировать на предмет исклю­чений, помещаются в try-блок.

 

 

 


Рис. 1. Без обработки исключения

 

 

Рис.2. Обработка исключения

 

 


Рис.3 Безошибочное выполнение

 

В С# исключения представляются классами, выведенными из встроенного класса исключений Exception.

 

 Наследниками класса Exception являются классы SystemException и ApplicationException, которые делят исходные исключения на две группы.

 

 

 


Формат записи try/catch-блоков:




Try

{

// Блок кода, подлежащий проверке на наличие ошибок.

}

catch ( ExcepType1 e )   

{

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

catch ( ExcepType2 e )

{

// Обработчик исключения типа ЕхсерТуре2.

}

 

ЕхсерТуре — это тип сгенерированного исключения.

е – экземпляр типа ЕхсерТуре.

 

Варианты catch-блоков:

catch ( ExcepType )   

{

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

    

catch ( IOException e )

{

// Обработчик всех исключений ввода-вывода

}

 

catch ( SystemException e )

{

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

}

 

catch ( Exception e )

{

// Обработчик всех исключений.

// Передается информация об исключении

}

 

catch ()

{

// Обработчик всех исключений.

// Информация об исключении не передается

}

 

Системные исключения класса SystemException

 

Производный класс Описание
ArithmeticException   Ошибка в арифметических операциях или операциях преобразования (предок DivideByZeroException и OverFlowException)
ArrayTypeMismatchException   Тип сохраняемого значения несовместим с типом массива
DivideByZeroException Попытка деления на нуль
FormatException   Попытка передать в метод аргумент неверного формата
IndexOutOfRangeException Индекс массива оказался вне диапазона
InvalidCastException Неверно выполнено динамическое приведение типов
OutOfMemoryException Обращение к оператору new оказалось неудачным из-за недостаточного объема свободной памяти
OverflowException Имеет место арифметическое переполнение и используется оператор checked
StackOverflowException Переполнение стека
NullReferenceException Была сделана попытка использовать нулевую ссылку, т.е. ссылку, которая не указывает ни на какой объект
IOException Ошибка ввода-вывода
TypeInitializationExeption Отсутствует блок catch для обработки исключения, сгенерированного статическим конструктором

 

 

Дата: 2019-02-02, просмотров: 297.