- •Лабораторная работа № 5. Потоки и процессы в Microsoft Visual Studio.
- •Методы решения дифференциального уравнения
- •Лабораторная работа № 6. Динамически подключаемые библиотеки
- •6.1. Цель работы
- •6.2. Теоретические сведения
- •Лабораторная работа № 7 Обработка исключительных ситуаций в Visual c#
- •7.1. Цель работы
- •7.2. Теоретические сведения
- •1) Контролируемый блок – составной оператор, предваряемый ключе-
- •Организация удаленного взаимодействия при помощи технологии .Net
- •8.1. Цель работы
- •8.2. Теоретические сведения
1) Контролируемый блок – составной оператор, предваряемый ключе-
вым словом try. В контролируемый блок включаются потенциально опасные операторы программы. Все функции, прямо или косвенно вызываемые из бло- ка, также считаются ему принадлежащими.
2) один или несколько обработчиков исключений - блоков catch, в которых описывается, как обрабатываются ошибки различных типов.
3) блок завершения finally выполняется независимо от того, возникла ошибка в контролируемом блоке или нет.
Алгоритм обработки исключения выглядит следующим образом:
1. Обработка исключения начинается с появления ошибки. Функция или операция, в которой возникла ошибка, генерирует исключение. Как правило,
исключение генерируется не непосредственно в блоке try, а в функциях, пря- мо или косвенно в него вложенных.
2. Выполнение текущего блока прекращается, отыскивается соответст- вующий обработчик исключения и ему передается управление.
3. Выполняется блок finally, если он присутствует (этот блок выпол- няется и в том случае, если ошибка не возникла).
4. Если обработчик не найден, вызывается стандартный обработчик ис-
ключения. Его действия зависят от конфигурации среды. Обычно он выводит на экран окно с информацией об исключении и завершает текущей процесс.
Обработчики исключений должны располагаться непосредственно за
блоком try. Они начинаются с ключевого слова catch, за которым следует в скобках тип обрабатываемого исключения. Можно записать один или несколь- ко обработчиков в соответствии с типами обрабатываемых исключений. Блоки catch просматриваются в том порядке, в котором они записаны, пока не будет найден соответствующий типу сгенерированного исключения. Существуют три формы записи обработчиков catch:
catch (тип имя) { …// тело обработчика} catch (тип) {… // тело обработчика} catch () {… // тело обработчика}
Первая форма применяется, когда имя параметра используется в теле об-
работчика для выполнения каких-либо действий, например вывода информации об исключении. Вторая форма не предполагает использования информации об исключении, играет роль только его тип. Третья форма применяется для пере- хвата всех исключений.
При генерации ИС их обработчики просматриваются в порядке их распо-
ложения в программе. Поэтому обработчик третьего типа следует помещать только после всех остальных. Также следует учитывать, что если обработчик ИС родительского класса будет стоять перед обработчиком ИС дочернего клас- са, то последний в этом случае не получит управления. Если исключения в за- щищаемом блоке не возникло, то все обработчики пропускаются.
В любом случае, произошло исключение или нет, управление передается
в блок завершения finally (если он существует), а затем первому оператору, находящемуся непосредственно за оператором try. В завершающем блоке обычно записываются операторы, которые необходимо выполнить независимо от того возникло исключение или нет. Обычно в этот блок помещают операто- ры, освобождающие ресурсы, выделяемые ОС программе, поэтому он еще ино- гда называется блоком защиты ресурсов.
Операторы try могут быть многократно вложены друг в друга. Исклю- чение, которое возникло во внутреннем блоке try и не было перехвачено соот- ветствующим блоком catch, передается на верхний уровень, где продолжается поиск подходящего обработчика. Если на внутреннем уровне недостаточно ин- формации для того, чтобы провести полную обработку ошибки, программист может выполнить частичную обработку и сгенерировать исключение повторно,
чтобы оно было обработано на верхнем уровне. Генерация исключения выпол- няется при помощи оператора throw, который имеет следующий синтаксис:
throw[выражение]
Конструкция без параметра применяется только внутри блока catch для повторной генерации исключения. Тип выражения, стоящего после throw, оп- ределяет тип исключения, например:
throw new DivideByZeroException();
Здесь после оператора throw записано выражение, создающее объект
стандартного класса «ошибка деления на 0» с помощью оператора new.
При использовании throw с параметром, последний должен быть объек- том, порожденным от стандартного класса System.Exception и опреде- ляющим вид исключения. Этот объект используется для передачи информации об исключении его обработчику.
При генерации исключения выполнение текущего блока прекращается и происходит поиск соответствующего обработчика с передачей ему управления. Обработчик считается найденным, если тип объекта, указанного после throw, либо тот же, что задан в параметре catch, либо является производным от не- го.
7.3. Программа работы
Добавить в программу калькулятора с динамически подключаемыми биб- лиотеками из второй лабораторной работы обработку возможно возникающих
в ней исключительных ситуаций (деления на ноль, ввода чисел вместо цифр,
отсутствия динамически подключаемой библиотеки и т.д.).
Лабораторная работа № 8 (дополнительная)