русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Оператор throw


Дата додавання: 2015-01-08; переглядів: 1046.


 

До цих пір ми розглядали виключення, які генерує середовище виконання С#, але це може зробити і сам програміст. Для генерації виключення використовується оператор 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

 


<== попередня лекція | наступна лекція ==>
Оператор try | Клас Exception


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн