Ім'я файлу: 04. Лекція ООП (Обробка винятків).pdf
Розширення: pdf
Розмір: 669кб.
Дата: 28.10.2020
скачати

ОБРОБКА ВИНЯТКІВ
КОНСТРУКЦІЯ TRY..CATCH..FINALLY

Визначення. Винятки – помилкові ситуації, що виникають при виконанні програми. Їх важко або неможливо (не визначено конкретний час виникнення помилки, наприклад, втрата мережевого з'єднання) передбачити.
Мова C # надає розробникам можливості для обробки таких ситуацій. Для цього в C # призначена конструкція:
try
{ … }
catch
{ … }
finally
{ …. }

ОБРОБКА ВИНЯТКІВ
При використанні блоку try ... catch … finally спочатку виконуються всі інструкції
в блоці try. Якщо в цьому блоці не виникло винятків, то після його виконання починає виконуватися блок finally. І потім конструкція try..catch..finally завершує
свою роботу.
Якщо ж в блоці try раптом виникає виняток, то звичайний порядок виконання зупиняється, і середовище Common Language Runtime (CLR) починає шукати блок catch, який може обробити цей виняток. Якщо потрібний блок catch знайдений, то він виконується, і після його завершення виконується блок finally.
Якщо потрібний блок catch не знайдено, то при виникненні виключення програма
аварійно завершує своє виконання. (демонстрація)

ОБРОБКА ВИНЯТКІВ
Особливості
1.
В цій конструкції обов'язковий блок try. При наявності блоку catch ми можемо опустити блок finally
2.
При наявності блоку finally ми можемо опустити блок catch і не обробляти виключення, але ж будемо аварйно завершувати програму, якщо виникла помилка.
3.
Блоков catch може бути декілька
4.
Використання блоку .TryParse(string s, out result) замість обробки винятків
5.
Не перехоплюйте виняток, якщо ви не маєте наміру його обробляти зі збереженням відомого стану програми. Якщо ви перехоплюєте System.Exception, створіть його заново в кінці блоку catch, використовуючи ключове слово throw
6.
Програма може явно створювати виключення за допомогою ключового слова throw
7.
Код в блоці finally виконується навіть в тому випадку, якщо створено виняток.
Використовуйте блок finally, щоб вивільнити ресурси, наприклад закрити потоки і файли, які були відкриті всередині блоку try.

БЛОК CATCH І ФІЛЬТРИ ВИНЯТКІВ
За обробку виключення відповідає блок catch, який може мати такі форми:
1. Catch без параметрів
catch
{
// виконувані інструкції
}
2. Catch з параметром типу_Винятка, але без змінної
catch (<тип_Винятка>)
{
// виконувані інструкції
}
3. Catch з параметром типу_Винятка та зі змінною. Дозволяє опрацювати допоміжну
інформацію про виняток
catch (<тип_Винятка> <ім’я_змінної> )
{
// виконувані інструкції
}

БЛОК CATCH І ФІЛЬТРИ ВИНЯТКІВ
За обробку виключення відповідає блок catch, який може мати такі форми:
4. Catch фільтри винятків. В цьому випадку обробка виключення в блоці catch
проводиться тільки в тому випадку, якщо умова в вираженні when істинно.
catch when(умова)
{
// виконувані інструкції
}

ТИПИ ВИКЛЮЧЕНЬ. КЛАС EXCEPTION
Базовим для всіх типів винятків є тип Exception. Цей тип визначає
ряд властивостей, за допомогою яких можна отримати інформацію про виключення:

InnerException: зберігає інформацію про виключення, яке послужило причиною поточного виключення

Message: зберігає повідомлення про виключення, текст помилки

Source: зберігає ім'я об'єкта або збірки, яке викликало виключення

StackTrace: повертає строкове представлення стека викликів, які
привели до виникнення виключення

TargetSite: повертає метод, в якому і було викликано виключення

ПОШУК БЛОКУ CATCH ПРИ ОБРОБЦІ ВИКЛЮЧЕНЬ
Якщо код, який викликає виняток, не розміщене в блоці try або поміщений в конструкцію try..catch, яка не містить відповідного блоку catch для обробки виниклого виключення, то система здійснює пошук відповідного обробника виключення в стеці
викликів (приклад)

ТИПОВІ ВИКЛЮЧЕННЯ
Спеціалізовані типи винятків, які призначені для обробки певних видів (поширені) :

DivideByZeroException: представляє виняток, яке генерується при діленні на нуль

ArgumentOutOfRangeException: генерується, якщо значення аргументу виходить за допустимі значення

ArgumentException: генерується, якщо в метод для параметра передається некоректне значення

IndexOutOfRangeException: генерується, якщо індекс елемента масиву або колекції
виходить за допустимий діапазон значень

InvalidCastException: генерується при спробі провести неприпустимі перетворення типів

NullReferenceException: генерується при спробі звернення до об'єкта, який дорівнює null
(тобто по суті невизначений)
Повний
перелік в SystemException Class
https://docs.microsoft.com/en-us/dotnet/api/system.systemexception?view=netcore-3.1

скачати

© Усі права захищені
написати до нас