Обработка исключений
При выполнении программы могут возникать ошибки, которые трудно предусмотреть или предвидеть. Например, при вычислении арифметического выражения может возникнуть переполнение разрядной сетки переменной. А иногда ошибки и вовсе невозможно предвидеть. Например, при передаче файла по сети может неожиданно оборваться сетевое подключение. Такие ситуации называются исключениями. Язык C# предоставляет разработчикам возможности для обработки таких ситуаций. Для этого в C# предназначена конструкция try...catch...finally.
Исключения в С# представлены классами. Все классы исключений могут быть унаследованы от встроенного класса исключений Exception, который является частью пространства имен System. Именно поэтому все исключения представляют собой подклассы класса Exception. Вся обработка исключений строится на 4 ключевых словах C#: try, catch, throw, finally.
При использовании блока try...catch..finally вначале выполняются все инструкции в блоке try. Если в этом блоке не возникло исключений, то после его выполнения начинает выполняться блок finally. И затем конструкция try..catch..finally завершает свою работу.
Если же в блоке try вдруг возникает исключение, то обычный порядок выполнения останавливается, и среда CLR начинает искать блок catch, который может обработать данное исключение. Если нужный блок catch найден, то он выполняется, и после его завершения выполняется блок finally. Если нужный блок catch не найден, то при возникновении исключения программа аварийно завершает свое выполнение.
Пример перехвата исключения при делении на ноль:
using System;class Sample{ static void Main() { try{ int a = 3; int b = 0; int c = a / b; // Деление на ноль Console.WriteLine(c); } catch(DivideByZeroException){//сработает данный catch Console.WriteLine("Деление на ноль !!!"); } Console.Read(); }}
Данная программа не будет выполнять деление на ноль и соответственно не будет выводить результат этого деления, но также она не будет аварийно завершаться, а исключение будет обрабатываться в блоке catch.
Некоторые специализированные типы исключений-наследников класс Exception, которые могут быть использованы при обработке массивов и арифметических операциях:
· DivideByZeroException: представляет исключение, которое генерируется при делении на ноль.
· ArgumentOutOfRangeException: генерируется, если значение аргумента находится вне диапазона допустимых значений.
· ArgumentException: генерируется, если в метод для параметра передается некорректное значение.
· FormatException: возникает в случае, если формат аргумента недопустим или строка составного формата построена неправильно.
· IndexOutOfRangeException: генерируется, если индекс элемента массива или коллекции находится вне диапазона допустимых значений.
· InvalidCastException: генерируется при попытке произвести недопустимые преобразования типов.
· NullReferenceException: генерируется при попытке обращения к объекту, который равен null (то есть по сути неопределен).
Задание
1. Создать консольное приложение так, как показано в примере 1.
2. Запустить программу и убедиться в корректности ее выполнения.
3. Дополнить функцию Main кодом, который вычисляет значение математической функции y в соответствии с индивидуальным заданием из табл. 2 и выводит его на консоль. Значения аргументов задать явным присваиванием констант. При невозможности вычисления вывести на консоль сообщение.
4. Переписать код так, чтобы некорректные ситуации обрабатывались посредством оператора try...catch...finally.
5. Составить блок-схему алгоритма функции Main для обоих вариантов реализации.
6. Протестировать программу, в том числе обработку исключений.
7. Выполнить контрольный просчет и сделать вывод.
Таблица 2. Варианты заданий к лабораторной работе №2
Содержание отчета:
- тема, цель, задание, в том числе индивидуальная часть и номер варианта;
- листинг программы;
- консольное окно с результатами работы программы;
- блок-схема алгоритма;
- контрольный просчет;
- вывод по работе.
Дата добавления: 2021-12-14; просмотров: 489;