Опубликован: 19.08.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Самостоятельная работа 5:

Событийно-ориентированное программирование

< Лекция 12 || Самостоятельная работа 5: 12 || Лекция 13 >

Исключительные ситуации

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

Для обработки исключений в языке С# примененяются следующие ключевые слова: try, catch, throw, finally. Перечисленные ключевые слова образуют взаимосвязанную подсистему, в которой использование одного из ключевых слов влечет за собой использование других.

Обработка исключений в языке C# реализуется на основе операторных блоков try и catch.

Описание блока try и catch

Синтаксис:

try {
Блок_кода_для_которого_выполняется
мониторинг_ошибок}
catch (ExcepTypel ехОb) 
    { Обработчик_исключений_ExcepTypel }
catch (ЕхсерТуре2 ехОb) 
    {Обработчик_исключений_ЕхсерТуре2 }

Основные системные исключения приведены в таблице 10.

Тип исключения в операторе catch должен соответствовать типу перехватываемого исключения. Неперехваченное исключение непременно приводит к досрочному прекращению выполнения программы.

Таблица 10. Основные системные исключения
Исключение Значение
ArrayTypeMismatchException Тип сохраненного значения несовместим с типом массива
DivideByZeroException Предпринята попытка деления на ноль
IndexOutOfRangeException Индекс массива выходит за пределы диапазона
InvalidCastException Некорректное преобразование в процессе выполнения
OutOfMemoryException Вызов new был неудачным из-за недостатка памяти
Overflow/Exception Переполнение при выполнении арифметической операции
StackOverflowException Переполнение стека

Для выполнения перехвата исключений вне зависимости от их типа (перехват всех исключений) возможно использование оператора catch без параметров.

Возврат из исключения

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

С целью предотвращения этой ситуации возможно указание блока кода, который вызывается после выхода из блока try / catch, с помощью блока finally в конце последовательности try / catch.

Конструкция try/catch с блоком finally

Синтаксис:

try {
// Блок кода, выполняющий мониторинг ошибок
}
catch (ExcepTypel ех1) {
//1 Обработка исключения ExcepTypel. 
}

catch (ЕхсерТуре2 ех2) {
// 2 Обработка исключения ЕхсерТуре2 .
finally {
// Код блока finally. 
}

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

Генерация исключений

Исключения автоматически генерируются средой программирования. Однако исключение может быть и явно сгенерировано посредством оператора throw.

Оператор throw

Синтаксис:

throw exceptOb;

Исключение, перехваченное одним оператором catch, может генерироваться повторно, и благодаря этому перехватываться внешним оператором catch. Для этого указывается ключевое слово throw без имени исключения.

Наследование классов исключений

Можно создавать заказные исключения, выполняющие обработку ошибок в пользовательском коде. Генерация исключений не представляет принципиальных сложностей, для этого требуется всего лишь определить класс, наследуемый из класса Exception. В качестве общего правила следует руководствоваться тем, что определенные пользователем исключения наследуются из класса ApplicationException, так как они представляют собой иерархию зарезервированных исключений, связанных с приложениями. Наследуемые классы не нуждаются в фактической реализации в каком-либо виде, поскольку сам факт их существования в системе типов данных позволяет воспользоваться ими в качестве исключений.

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

Порядок выполнения работы

  1. Реализовать программу на языке C# в соответствии с вариантом исполнения.
  2. Графически проиллюстрировать место реализованного исключения в общей иерархии.

Варианты заданий

Реализовать обработку ошибок для лабораторной работы №9, при этом переопределив с помощью наследования событие:

  1. StackOverflowException
  2. ArrayTypeMismatchException
  3. DivideByZeroException
  4. IndexOutOfRangeException
  5. InvalidCastException
  6. OutOfMemoryException
  7. OverflowException
< Лекция 12 || Самостоятельная работа 5: 12 || Лекция 13 >