Организация обработки исключений в С#
Основная идея обработки исключений состоит в том, что в программе можно определить блок кода, именуемый обработчиком исключений, который автоматически будет получать управление при возникновении определенной ошибки. Обработчик исключений оформляется в виде catch-блока.
В этом случае не обязательно проверять результат выполнения ка- ждой конкретной операции или метода вручную.
Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок.
Программа
Метод, CLR

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