Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

13 C# Исключения 4_5_15

.doc
Скачиваний:
33
Добавлен:
29.03.2016
Размер:
157.18 Кб
Скачать

9

Макаров М.И.

______________________________________________________

ПОВОЛЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ТЕЛЕКОММУНИКАЦИЙ И ИНФОРМАТИКИ

Кафедра Информатики и вычислительной техники

Методические указания на проведение лабораторных работ

"C#. Обработка исключительных ситуаций"

по дисциплине «Программирование на языках высокого уровня», специальности 200700, 210400, 230100, 230400, 231000).

Авторы-составители:

доцент. Макаров М.И.

Самара 2015

В в е д е н и е

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

Рекомендуемая литература

  1. С# 4.0: полное руководство / Г. Шилдт. – М.: ООО “И.Д. Вильямc” , 2011. – 403-418 с.

  2. С# 4.0 и платформа .NET 4 для профессионалов / К. Нейгел, Б. Ивьен, Д. Глинн, К. Уотсон. – М.: ООО “И.Д. Вильям” , 2011. – 54, 418-431 с.

  3. Программирование на языке C# в Microsoft Visual Studio .Net или SharpDevelop / Э.А. Акчурин, 2010 – 98-100 с.

  4. Программирование на C# / Д. Либерти, 2010 – 279-293, 295 с.

  5. Язык программирования С#. Классика Computer Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд – СПб.: Питер, 2012. – 657-661 с.

  6. Язык программирования C# 5.0 и платформа .NET 4.5 / Э. Троелсен – М.: ООО “И.Д. Вильямc” , 2013. –261-273, 278-286 с.

Лабораторная работа

«С#: Классы и объекты»

  1. Подготовка к работе

По методическим указаниям изучить основные понятия объектов и классов и уяснить принципы работы с ними. Ответить на контрольные вопросы.

  1. Контрольные вопросы

2.1. Что такое исключительная ситуация?

2.2. Для чего применяется ключевое слово try?

2.3. Для чего применяется ключевое слово catch?

2.4. Для чего применяется ключевое слово finally?

2.5. Для чего применяется ключевое слово throw?

2.6. Как отследить все стандартные исключительные ситуации?

2.7. Для чего применяется поле Message?

Задание 3.1. Простой перехват исключений

3.1.1. Создать целочисленный массив из количества элементов равному значению номера варианта.

3.1.2. Заполнить массив случайными значениями при помощи цикла foreach.

3.1.3. Попытаться считать значение из элемента массива равного номеру вашего варианта. Текст вызванной ошибки записать в строковую переменную.

3.1.4. Перехватить исключительную ситуацию вызывающую ошибку. Вывести на экран содержимое строковой переменной из предыдущего задания и содержимое поля Message объекта перехваченного исключения.

3.1.5. Организовать цикл, в котором должно участвовать значения двух переменных i и j. Шаг i равен 3, а j равен -1. Начальное значение i равно произведению 10 и номера варианта, а j равно сумме 5 и номера варианта. Выполнять цикл до тех пор, пока значение j не станет равно -10. В теле цикла осуществить вывод в одной строке через пробел значения остатков деления i на j.

3.1.6. Организовать перехват всех исключительных ситуаций для цикла из предыдущего задания.

Задание 3.2. Многоуровневый перехват исключений

3.2.1. Создать генератор псевдо случайных целых чисел в диапазоне находящемся за пределами допустимых значений для типа данных byte (для четного варианта) или short (для нечетного).

3.2.2. Сгенерировать одно псевдослучайное значение и поместить в переменную типа int.

3.2.3. Открыть подряд два блока перехвата исключений try. Внутри блока, реализовать присвоение переменной типа byte (для четного варианта) или short (для нечетного) значение целочисленной переменной из предыдущего задания при помощи приведения. Для присвоения включить защиту от переполнения. Результат вывести на экран. Закрыть операторную скобку для одного блока try.

3.2.4. Закрытый блок будем далее считать внутренним обработчиком исключений и для него реализовать перехват исключительной ситуации – переполнение. При перехвате вывести на экран “Сработал внутренний обработчик”. Закрыть операторную скобку для второго блока try (его будем считать внешним обработчиком).

3.2.5. Для внешнего обработчика реализовать перехват всех исключительных ситуаций. При перехвате вывести на экран “Сработал внешний обработчик”.

3.2.6. Запустить программу. Убедиться в том, что осуществляется перехват только внутренним обработчиком. Осуществить передачу исключения внешнему обработчику при помощи throw.

3.2.7. В блоке finally внешнего обработчика осуществить присвоение переменной типа byte (для четного варианта) или short (для нечетного) значение целочисленной переменной с псевдослучайным значением при помощи приведения. Для присвоения не включать защиту от переполнения. Результат вывести на консоль.

Методические указания

Методические указания к пункту 3.1.

Для обработки исключительных ситуаций применяется конструкция try-catch-finally. Элемент finally является необязательным, и рассмотрим пример перехвата исключения без него:

В блоке try располагается код, в котором отслеживается возникновение исключения. Если исключение возникает, то вместо закрытия программы с выводом сообщения об ошибке, управление передается в блок catch. Те исключительные ситуации, которые необходимо перехватить указываются в качестве параметра для блока catch (Список наиболее встречаемых исключений см. в приложении). В данном случае перехватывается попытка деления на нуль. В момент перехвата был создан объект error. Поле Message содержит описание ошибки. Можно перехватывать исключения без создания объекта, тогда блок catch примет вид:

Если необходимо перехватывать не какое-то определенное исключение, а все, то необходимо блок catch оставить без параметров. Пример:

Методические указания к пункту 3.2.

Конструкцию обработки исключений try-catch-finally часто сравнивают с конструкцией if-then-else. Такое сравнение часто вводит в заблуждение. Блок finally выполняется после выполнения блоков try или catch. Таким образом, будет не важно, произошло исключение или нет, блок finally получит управление на выполнение кода. В конструкции if-then-else передача управления блоку else происходит не всегда.

Рассмотрим пример:

В результате будет на экране выведено “23”. Вывод на экран единицы не будет осуществлено, потому что в уравнении происходит попытка деления на нуль и управление выполнением кода перехватывает блок catch.

В обработчиках исключений применяется управляющий оператор Throw. Данный оператор вызывает указанную исключительную ситуацию. Например, вызов исключительной ситуации выхода за границы массива:

Чаще всего оператор Throw применяется для передачи исключения с внутреннего блока Catch на внешний блок. Для этого оператор используется без параметров:

В результате на экране будет выведено “2345”. Если же в приведенном примере убрать управляющий оператор Throw, то по выполнению программы на консоль будет выведено только “235”.

Примерная структура программы задания 3.2:

Приложение

Таблица исключений

Название исключения

Описание

DivideByZeroException

Попытка деления на нуль

IndexOutOfRangeException

Индекс за границами массива

OverflowException

Арифметическое переполнение

InvalidCastException

Неверное приведение типов

9