Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛР_Технология программирования _ 2.doc
Скачиваний:
14
Добавлен:
26.11.2019
Размер:
654.34 Кб
Скачать

Лабораторная работа № 7 Обработка исключительных ситуаций в Visual c#

7.1. Цель работы

Ознакомление с классом исключительных ситуаций Visual C# и выработ- ка навыков создания приложений, осуществляющих обработку возникающих исключительных ситуаций

7.2. Теоретические сведения

Любое взаимодействие программы с операционной системой (ОС) на предмет получения ее ресурсов (открытия файла, места в оперативной памяти и т.п.) может окончиться неудачно. Выполнение любого вычисления может окончиться делением на нуль или переполнением. Платой за надежную работу программы в таких условиях является введение многочисленных проверок, га- рантирующих надежную работу программы при возникновении внештатных ситуаций. Как правило, бывает недостаточно просто в очередной конструкции условного перехода (типа if… then) поставить оператор выхода exit, а требу- ется отменить целую последовательность действий, предшествующих некор- ректному. Код программы, осуществляющий эти действия, будет маскировать четкую структуру главного алгоритма и приводить к ухудшению читабельности программы. Выход из данной ситуации был предложен разработчиками ОС Windows NT и получил название структурной обработки исключительных си- туаций (ИС). Позднее его поддержка была введена во все ОС, а также в среды разработки программ.

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

паратуры или неправильной работой программы, например делением на ноль или переполнением. Обычно эти события приводят к завершению программы с системным сообщением об ошибке. С# дает программисту возможность вос- становить работоспособность программы и продолжить ее выполнение. Ис- ключения С# не поддерживают обработку асинхронных событий, таких как ошибки оборудования или прерывания, например нажатия клавиш Ctrl^C. Ме- ханизм исключений предназначен только для событий, которые могут произой-

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

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

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

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

Исключения генерирует либо среда выполнения, либо программист с по-

мощью оператора throw. Наиболее часто используемые предопределенные ис- ключительные ситуации в C# следующие:

ArithmeticException – ошибка в арифметических операциях или преобразованиях (является предком DivideByZeroException и OverFlo- wException);

ArrayTypeMismatchException – попытка сохранения в массиве элемента несовместимого типа;

DivideByZeroException – попытка деления на ноль;

FormatException – попытка передать в метод аргумент неверного формата;

IndexOutOfRangeException – индекс массива выходит за границы диапазона;

InvalidCasrException – ошибка преобразования типа;

OutOfMemoryException – недостаточно памяти для создания нового объекта;

OverFlowException – переполнение при выполнении арифметических операций;

StackOverFlowException – переполнение стека.

Все перечисленные исключения определены в пространстве имен System. Все они являются потомками класса SystemException. Исключе- ния обнаруживаются и обрабатываются оператором try, который имеет сле- дующий синтаксис:

try блок [блоки catch] [блок finally]

Отсутствовать могут либо блоки catch, либо блок finally, но не оба

одновременно. Оператор try содержит три части: