Понятие «Структурная обработка исключений».
Многие системные функции возвращают значение, указывающее на успешное или безуспешное выполнение функции. Однако такой способ извещения программы имеет ряд недостатков:
• Во-первых, программист обязан выполнять все проверки возвращаемого значения и либо реагировать на ошибки, либо передавать их на более высокий уровень программы. Если на одном из уровней проверка не проводится, то ошибки могут повлиять на другие части программы.
• Во-вторых, текст программы загромождается операторами 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, просмотров: 295.