Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КНЕУ.doc
Скачиваний:
24
Добавлен:
07.03.2016
Размер:
3.9 Mб
Скачать

4.4.2. Оператор throw

До цих пір ми розглядали виключення, які генерує середовище виконання С#, але це може зробити і сам програміст. Для генерації виключення використовується оператор throw з параметром, що визначає вид виключення. Параметр має бути об'єктом, породженим від стандартного класу System.Exception. Цей об'єкт використовується для передачі інформації про виключення його обробникові.

Оператор throw викликається або з параметром, або без нього:

Throw [ вираз ];

Форма без параметра застосовується тільки усередині блоку catch для повторної генерації виключення. Тип виразу, що стоїть після throw, визначає тип виключення, наприклад:

throw new DivideByZeroException( );

Тут після слова throw записаний вираз, що створює об'єкт стандартного класу “помилка при діленні на 0” за допомогою операції new. При генерації виключення виконання поточного блоку припиняється і відбувається пошук відповідного обробника з передачею йому управління. Обробник вважається знайденим, якщо тип об'єкту, вказаного після throw, або той же що заданий в параметрі catch, або є похідним від нього.

Розглянемо приклад генерації виключень на лістингу 4.12.

Лістинг 4.12. Генерація виключень

using System;

namespace ConsoleApplication1

{

class Test

{

static void F()

{

try

{

G();

}

catch (Exception e)

{

Console.WriteLine("Exception in F: " + e.Message);

e = new Exception("F");

throw e; // повторна генерація виключення

}

}

static void G()

{

throw new Exception("G"); //моделювання виняткових ситуацій

}

static void Main()

{

try

{

F();

}

catch (Exception e)

{

Console.WriteLine("Exception in Main:" + e.Message);

}

}

}

}

У методі F виконується проміжна обробка виключення, яка полягає в тому, що на консоль виводиться поле Message перехопленого об'єкту е (про елементи класу Exception розповідається в наступному розділі). Після цього виключення генерується заново. Не дивлячись на те що в обробнику виключення створюється новий об'єкт класу Exception із зміненим рядком інформації,що передається у виключенні, викидається не цей об'єкт, а той, який був перехоплений обробником, тому результат роботи програми наступний:

Exception in F: G

Exception in Main: G

Замінимо оператор throw таким оператором:

throw e;

В цьому випадку в обробнику буде викинуто виключення, створене в попередньому операторові, і виведення програми зміниться:

Exception in F: G

Exception in Main: F

4.4.3. Клас Exception

Клас Exception містить декілька корисних властивостей, за допомогою яких можна отримати інформацію про виключення. Вони перераховані в таблиці 4.2.

Таблиця 4.2

Властивості класу System.Exception

Властивість

Опис

HelpLink

URL файла справки з описом помилки

Message

Текстовий опис помилки. Встановлюється при створенні об'єкту. Властивість доступна тільки для читання

Source

Ім'я об'єкту або додатку, яке згенерувало помилку

StаскTrace

Послідовність викликів, які привели до виникнення помилки. Властивість доступна тільки для читання

InnerException

Містить посилання на виключення, що послужило причиною генерації поточного виключення

TargetSite

Метод, що викинув виключення