Перехоплення винятків у Visual C # (Sharp)

На рис 213 показано, як середовище Visual С # Express перервала потік виконання пррамми, перехопивши виняток, сгенерированное арифметичним переполненм Це подібно ситуації, коли на уроці практичного водіння інструктор пехвативает управління від учня, щоб уникнути аварійної ситуації, передумови до якої були створені неправильними діями учня Побним чином, механізм середовища CLR для перехоплення і обробки виключень можна розглядати як перехоплення інструктором управління, щоб уникнути оіцательних наслідків на виконанні операційної системи та інших пріленій, які може викликати неадекватне поведінка якої програми

Залежно від конкретної позаштатної ситуації перехоплення інструктором керуючи може полягати в гальмуванні, вивертанні керма, усному вказівці і т п

Те ж саме відбувається і при перехопленні винятків – подальші дії можуть мати різний характер У прикладі на рис 213 перехоплення був виконаний срой IDE, яка надала дружній, легко розуміється інтерфейс для подальшої обробки виключення

Тепер поглянемо на приклад вихідного коду, генеруючого виняток (рис 52) На технічному жаргоні це називається викиданням винятку (throwing an exception)

Рис 52 Викидання виключення

Якщо виконати метод RunAHO, то Visual С # Express згенерує виключення (рис 53)

Рис 53 Виняток, викликане зверненням до null-даними

Але цей виняток не викличе збою ні Visual С # Express, ні операційних систем, тому що воно було перехоплене обробником винятків, вбудованим в Visual Studio Повертаючись до аналогії з інструктором водіння, Visual Studio перехоплення управління і вивела з нормального потоку виконання тільки програму, соавшую аварійну ситуацію

Тепер уявімо собі, що ця програма виконується сама по собі, а не в Visual Studio У цьому випадку сгенерированное виняток змусить програму залишимося на повному бігу, вивівши на екран просторове повідомлення про помилку, що перераховує посилання на обєкти, рядки коду і стек Більшість пользоватей нічого не зрозуміла б, що сталося, і було б змушене припинити роботу з програмою

Щоб уникнути такого розвитку подій, необхідно у вихідний код програми вставити засіб для перехоплення виключення, як це зробила Visual Studio Нрімер, якщо-є підстави вважати, що виключення може бути сгенерірано в методі RunAii (), то код можна модифікувати таким чином:

class МуТуре {

public int DataMember

}

class Tests {

public void GeneratesException() { MyType els = null clsDataMember = 10

&gt&nbsp

public void RunAllO {

try {

GeneratesException()

}

catch (Exception) {

}

}

&gt&nbsp

}

Код, виділений жирним шрифтом, називається блоком винятку Цей код пехвативает виняток і надає кошти для його обробки У цьому прерії після перехоплення виключення нічого не відбувається При її виконанні Visual С # Express НЕ згенерує повідомлення про виключення, і програма виповниться без проблем З точки зору Visual С # Express з програмою все гаразд

Але якщо подумати, то в самій справі з програмою все в порядку Іншими словами, хоч програма і виконується, не викликаючи повідомлень про помилку, чи є вона логічно правильною Звичайно ж, немає, т к вона проковтнула виняток, не зробивши ніяких дій щодо усунення причин, що викликали проблему

Ніколи не виконуйте обробку перехопленого виключення таким чином, т к це буде неохайним програмуванням

ПРИМІТКА

На практиці в деяких випадках може бути необхідне залишити перехоплені винятку без подальшої обробки, тому що це може бути єдиним спос обробки даних Таке може статися при роботі з мережевими зєднаннями, операціями баз даних і т п Але в більшості випадків перехоплений виняток не слід залишати без подальшої обробки

Прикладом реальної ситуації, в якій необхідно викинути виняток, мет бути недійсний параметр Як буде розглянуто в розд Фільтрація винятків далі в цьому розділі,для таких випадків є спеціальний тип ілюченія-Argumen t Except ion о Розробники, отримавши це виняток, можуть потім з легкістю обчислити, що їм необхідно виправити параметр Це позв їм заощадити час на налагодженні і скоротити загальний час розробки

Реальна робота в обробці виключень складається у вставці коду для перехоплення і обробки всіх можливих винятків Але що краще, втратити кілька годин у пошуках причини помилки або витратити кілька хвилин на вставку коду, котий допоможе знайти потенційну помилку без особливих труднощів Питання рітіческій, т к, загалом, додавання коду для вказівки причин помилки заощадить вам час і збереже нерви

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*