Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа № 6
2 Общие сведения
Исключительная ситуация (или исключение) - это ошибка, которая возникает во время выполнения программы. Используя С#-подсистему обработки исключительных ситуаций, с такими ошибками можно справляться. В С# эта подсистема включает в себя усовершенствованные методы, используемые в языках C++ и Java. Преимущество подсистемы обработки исключений состоит в автоматизации создания большей части кода, который ранее необходимо было вводить в программы "вручную". Обработка исключений упрощает "работу над ошибками", позволяя в программах определять блок кода, именуемый обработчиком исключении, который будет автоматически выполняться при возникновении определенной ошибки. В этом случае не обязательно проверять результат выполнения каждой конкретной операции или метода вручную. Если ошибка возникнет, ее должным образом обработает обработчик исключений.
Еще одним преимуществом обработки исключительных ситуаций в С# является определение стандартных исключений для таких распространенных программных ошибок, как деление на нуль или попадание вне диапазона определения индекса. Чтобы отреагировать на возникновение таких ошибок, программа должна отслеживать и обрабатывать эти исключения. Без знания возможностей С#-подсистемы обработки исключений успешное программирование на С# попросту невозможно.
В С# исключения представляются классами. Все классы исключений должны быть выведены из встроенного класса исключений Exception, который является частью пространства имен System. Таким образом, все исключения - подклассы класса Exception.
Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок. Если исключение возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации. Это выброшенное исключение может быть перехвачено программным путем с помощью catch-блока и обработано соответствующим образом. Системные исключения автоматически генерируются С#-системой динамического управления. Чтобы сгенерировать исключение вручную, используется ключевое слово throw. Любой код, который должен быть обязательно выполнен при выходе из try-блока, помещается в блок finally.
Ядром обработки исключений являются блоки try и catch. Эти ключевые слова работают "в одной связке"; формат записи try/catch-блоков обработки исключений имеет следующий вид:
try {
// Блок кода, подлежащий проверке на наличие ошибок.
}
catch (ExcepTypel exOb) {
// Обработчик для исключения типа ExcepTypel
}
catch (ExcepType2 exOb) {
// Обработчик для исключения типа ЕхсерТуре2
}
Здесь ЕхсерТуре - это тип сгенерированного исключения. После "выброса" исключение перехватывается соответствующей инструкцией catch, которая его обрабатывает. Как видно из формата записи try/catch-блоков, с try-блоком может быть связана не одна, а несколько catch-инструкций. Какая именно из них будет выполнена, определит тип исключения. Другими словами, будет выполнена та catch-инструкция, тип исключения которой совпадает с типом сгенерированного исключения (а все остальные будут проигнорированы). После перехвата исключения параметр exOb примет его значение.
Задавать параметр exOb необязательно. Если обработчику исключения не нужен доступ к объекту исключения (как это часто бывает), в задании параметра exOb нет необходимости. Поэтому во многих примерах этой главы параметр exOb не задан.
Важно понимать следующее: если исключение не генерируется, то try-блок завершается нормально, и все его catch-инструкции игнорируются. Выполнение программы продолжается с первой инструкции, которая стоит после последней инструкции catch. Таким образом, catch-инструкция (из предложенных после try-блока) выполняется только в случае, если сгенерировано соответствующее исключение.
Ниже представлены наиболее часто используемые исключения, определенные в пространстве имен System:
Исключение |
Значение |
ArrayTypeMismatchException |
Тип сохраняемого значения несовместим с типом массива |
DivideByZeroException |
Попытка деления на нуль |
IndexOutOfRangeException |
Индекс массива оказался вне диапазона |
InvalidCastException |
Неверно выполнено динамическое приведение типов |
OutofMemoryException |
Недостаточный объем свободной памяти |
OverflowException |
Имеет место арифметическое переполнение |
NullReferenceException |
Попытка использовать нулевую ссылку |
StackoverflowException |
Переполнение стека |
Иногда требуется перехватывать все исключения, независимо от их типа. Для этого используется catch-инструкция без параметров. В этом случае создается обработчик "глобального перехвата", который используется, чтобы программа гарантированно обработала все исключения.
Задание: оптимизировать программу, производящую простые арифметические операции над числами (сложение, вычитание, умножение и деление), используя обработку исключительных ситуаций (обработка ввода чисел и операции деления).
Пример:
using System;
namespace ConsoleApplication {
class OurClass {
static void Main(string[] args) {
float num1 = 1, num2 = 2, summarize, multiply, sub, divide = 0;
Console.Write("Введите первое число:");
try { num1 = float.Parse(Console.ReadLine()); }
catch {
Console.WriteLine("Неправильный формат числа!\n"+
"В качестве значения первого числа будет 1");
}
Console.Write("Введите второе число:");
try { num2 = float.Parse(Console.ReadLine()); }
catch {
Console.WriteLine("Неправильный формат числа!\n"+
"В качестве значения второго числа будет 2");
}
summarize = num1 + num2; multiply = num1 * num2; sub = num1 - num2;
try { divide = num1 / num2; }
catch(DivideByZeroException) {
Console.WriteLine("Нельзя делить на нуль!");
}
Console.WriteLine(
"\n" + num1 + " + " + num2 + " = " + summarize +
"\n" + num1 + " * " + num2 + " = " + multiply +
"\n" + num1 + " - " + num2 + " = " + sub +
"\n" + num1 + " / " + num2 + " = " + divide);
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string anykey = Console.ReadLine();
}
}
}
3. Задание для самостоятельной pаботы
Для своего варианта задания лабораторной работы № 2 оптимизировать программу, включив в нее обработку исключительных ситуаций: ввода данных, операции деления и др.
4.1. Титульный лист.
4.2. Краткое теоретическое описание.
4.3. Задание на лабораторную работу, включающее математическую формулировку задачи.
4.4. Результаты выполнения работы, включающие схему алгоритма, тексты программ, результаты вычислений.
Литература
PAGE \* MERGEFORMAT 65