русс | укр

C# - Головна
Контакти
Задайте питання...
Перегляд всіх питань


Простір імен
  ► System (5)
  ► Microsoft (1)


Для учнів (початківців)
  ► Відео уроки (4)
  ► Навчання (177)
  ► Приклади програм (19)
  ► Секрети Сі Шарп (4)

Для професіоналів
  ► Навчання (6)
  ► Приклади програм (1)










Блоки try-catch C#

Для того щоб організувати в своїй програмі З# обробку помилок з використанням винятків, потрібно застосувати блоки, створені за допомогою ключових слів try, catch і finally. Створення виключення (або, як ще кажуть, передачу або збудження виключення) виконують за допомогою ключового слова throw.

В блок try полягає код, який може викликати виникнення помилок, т. з. «ненадійний» код. Слідом за блоком try може розташовуватися один або кілька блоків catch, у яких міститься код обробки помилок.

Розглянемо приклад обробки помилки ділення на нуль за допомогою винятків

using System;

namespace DivideByZeroEx

{

class DivByZeroExApp

static void Main(string[] args)

{

int i = 0;

try

{

int j = 5 / i; }

-atch (System. Exception ex) (

Console. WriteLine(

">» Помилка у програмі {0} [{!) ] \n\n{2} " , ex. Source, ex. Mas sage, ex. StackTrace) ; }

Console . ReadLine ( ) ;

}

}

}

Тут ми уклали в блок try рядок програми, при виконанні якої може виникнути помилка ділення на нуль:

Try

{

int j = 5 / i;

}

У блоці try може бути довільна кількість програмних рядків, що містять виклики методів, звернення до інтерфейсів, властивостей і індексаторів, оператори циклу і т. п. При відсутності помилок вага ці рядки виконуються звичайним

Якщо ж в процесі виконання будь-якої програмної рядка виникає помилка, нормальна послідовність роботи програми переривається, і управління передається до найближчого блоку catch, розташованому слідом за блоком try. Ось як у нашій програмі виглядає блок catch, призначений для обробки помилки ділення на нуль:

using System;

namespase DivByZeroEx

{

class DivByZeroExApp

{

static void Main(string[] args)

{

int i = 0;

try

{

int j = 5 / i;

}

catch (System.Exception ex)

{

Console.WriteLine(">>>Щшибка в програмі {0} [{1}]\n\n{2}")

ex.Sourse, ex.Message, ex.StackTrace);

}

Console.ReadLine();

}

}

}

Тут ми уклали в блок try рядок програми, при виконанні якої може виникнути помилка ділення на нуль:

int j = 5 / i;

}

У блоці try може бути довільна кількість програмних рядків, що містять виклики методів, звернення до інтерфейсів, властивостей і індексаторів, оператори циклу і т. п. При відсутності помилок вага ці рядки виконуються звичайним чином.

Якщо ж в процесі виконання будь-якої програмної рядка виникає помилка, нормальна послідовність роботи програми переривається, і управління передається до найближчого блоку catch, розташованому слідом за блоком try. Ось як у нашій програмі виглядає блок catch, призначений для обробки помилки ділення на нуль:

catch(System.Exception ex) {

Console.WriteLine(">>>Щшибка в програмі {0} [{1}]\n\n{2}")

ex.Sourse, ex.Message, ex.StackTrace);

У круглих дужках після ключового слова catch зазначається тип (клас) оброблюваного виключення. В даному випадку ми вказали базовий клас System.Exception, від якого «відбуваються» всі інші класи обробки винятків.

Сконструйований таким способом обробник виключень здатний перехоплювати виключення всіх типів, що виникають при виконанні коду, обмеженого попереднім блоком try.

Слідом за позначенням класу оброблюваного виключення ми вказали ім'я змінної ex. Коли блок catch отримує управління, ця змінна містить посилання на об'єкт класу System-Exception. Властивості цього класу містять інформацію, яка може виявитися корисною при обробці винятки:

• властивість System. Exception . Source містить назву програми, в якій відбулося виключення;

• властивості Sy stem. Except ion. Message зберігається текст повідомлення про помилку;

• властивість System. Except ion. StackTrace містить точну інформацію про те, в якому місці програми відбулося виняток.

 

Переглядів: 1925






© 2012 ci-sharp.ru При використанні матеріалу пряме iндексуюче посилання на сайт ОБОВ'ЯЗКОВЕ.
Права строго захищені нормами міжнародного права, інтелектуальної власності та авторського права.