SlideShare a Scribd company logo
1 of 51
Ковалюк Т.В. Обробка виключних ситуацій на C# 1/50 1
Лектор доцент кафедри ПСТ ФІТ КНУ імені Тараса Шевченка
Ковалюк Т.В. , к.т.н.
2/50Ковалюк Т.В. Обробка виключних ситуацій на C#
План лекції
4
Постановка проблеми та її актуальність1
2
3
5
Мета та завдання лекції
Поняття винятків
Приклади винятків
6
Класи винятків в С#
7
Генерація винятків і оператор throw
8 Створення користувацьких класів винятків
9 Контрольні запитання
10 Література та джерела
Обробка винятків. Блоки try, catch, finally
3/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Постановка проблеми та її актуальність
Вимоги щодо
обробки збоїв в
програмі
Не допускати повного "розвалу" системи
Заносити всі випадки аномального
поведінки в журнал
Гарантувати відновлення системи до
стану, що був до виникнення збою
Надавати вичерпну інформацію про
помилку, необхідну для її діагностики
1
2
3
4
Не та програма працює коректно, яка зовсім не дає збоїв, а та, яка їх коректно обробляє і
дає вичерпну інформацію, необхідну для всебічної діагностики нештатної ситуації.
4/50Ковалюк Т.В. Обробка виключних ситуацій на C#
1
2
3
4
Мета та завдання лекції
Набуття практичних
навичок щодо
обробки виняткових
ситуацій та
недопущення
логічних помилок в
програмі мовою
програмування C#
Мета: Завдання:
5/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Виконання
некоректного
програмного
коду
Порушення
обмежень
середовища
виконання
програми
Збої
обладнання
Причини помилок в програмі
Некоректне
введення даних
6/50Ковалюк Т.В. Обробка виключних ситуацій на C#
 Винятки (Exceptions) - це тип помилки, яка відбувається під час виконання програми.
 Помилки зазвичай означають появу несподіваних проблем і можуть привести до
непередбаченого завершення програми.
 Виняткові ситуації - це незвичайні неочікувані обставини, що виникають під час роботи
програми, це аномальна поведінка під час виконання програми, що перешкоджають
успішному виконанню конкретного завдання.
 Винятки порушують нормальний хід роботи програми, і на них треба негайно
відреагувати
Поняття винятків
Винятки, обробка яких організована в коді, є очікуваними
7/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Доступ до елементу поза
межами масиву
Спроба відкрити файл, якого не існує
Конвертація
некоректних даних з
одного типу в інший
Вичерпування пам'яті
програми
Арифметичні помилки:
ділення на нуль, корінь
з від’ємного числа…
Приклади помилок (винятків)
та багато інших
Ковалюк Т.В. Обробка виключних ситуацій на C# 8/50 8
 Безпека програмного
забезпечення в процесі
виконання.
Призначення обробників винятків
C # може обробляти різні типи винятків за
допомогою механізму обробки винятків.
 Забезпечення стабільності та
надійності роботи програми.
Обробка винятків - процес обробки
помилок часу виконання
 Дружня поведінка закінченого
програмного продукту.
Обробка винятків вказує на дію, яку
необхідно виконати в разі виникнення
помилки, щоб запобігти примусовому
завершенню програми.
 Зручність при написанні
програмного коду.
Винятки системного рівня викликаються
(викидаються) системою.
Винятки рівня додатків викликаються
самими додатками.
9/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Підходи до обробки помилок
1. Повернення тільки
коду помилки з
методу
int errNum = firstMethod();
if (errNum == -1)
{
// обробка 1-ої помилки
}
else if (errNum == -2)
{
// обробка 2-ої помилки
}
2. Використання
значень типу, що
повертається з методу
if ((ans = root(value))) < 0)
{
// обробка помилки
}
else
{
// Продовження
обчислень
}
3. Вбудований в мову механізм
перевірки та обробки винятку
try
{ // бізнес-логіка за алгоритмом
}
catch(Exception1 e1)
{ // обробка 1-ої помилки
}
catch(ExceptionN eN)
{// обробка N-ої помилки
}
finally
{
// виконання дій, що завершують роботу
}
10/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Переваги та недоліки обробки винятків
1. Винятки відокремлюють код
обробки помилок від
алгоритму програми, тим
самим підвищуючи
розбірливість, надійність і
розширюваність коду
2. Обробку помилок можна
централізувати в аспектах
(парадигма аспектно-
орієнтованого програмування)
3. Генерація виключення – це
єдиний чистий спосіб
повідомити про помилку з
конструктора
1. Винятки порушують структуру
коду, створюючи безліч прихованих
точок виходу, що ускладнює
читання і вивчення коду.
2. Винятки легко викликають витік
ресурсів, особливо в мові, що не
має вбудованого збирача сміття і
блоків finally в кінці.
3. Якщо виняток виникне в
деструкторі, то або компілятор
буде змушений видалити в
повному обсязі звільнений об'єкт,
або об'єкт залишиться існуючим,
тобто виникне витік пам'яті..
11/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Переваги та недоліки обробки винятків
4. Винятки важко ігнорувати, на
відміну від кодів помилок.
5. Винятки легко передаються з
глибоко вкладених функцій.
6. Винятки можуть бути
обумовленими користувацькими
типами, що несуть більше
інформації, ніж код помилки
7. Об'єкти винятків зіставляються з
обробниками за допомогою
системи типів (класів).
8. Винятки можна створювати між
різними процесами і навіть
комп'ютерами.
9. Неприпустимі значення не
поширюються по системі на
відміну від обробки кодів помилок.
4. Винятки важко ввести в застарілий
код.
5. Реалізація механізму обробки
винятків істотно залежить від мови,
і навіть компілятори одної і той
самої мови можуть мати відмінності.
6. Важко передавати винятки між
частинами програми, написаними
на різних мовах.
7. Підтримка винятків ускладнює мову
і компілятор. Також вона знижує
швидкість роботи програми.
8. Виняток (потенційно) може
відбутися в будь-якому операторі і
аналізом самого коду неможливо
дізнатися, де саме виключення
можуть відбуватися.
12/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Виняток викидається (throw), коли виникає виняткова ситуація.
Виняток перехоплюється в програмі (catch) і обробляється.
В іншому випадку виняток обробляється за замовчуванням.
Throw
Error
такі, що не
перевіряються
Exception
RuntimeException
такі, що не
перевіряються
Усі інші
такі, що
перевіряються
Error – фатальні помилки
RuntimeExcеption –
компілятор не вимагає їх
обов'язкової обробки
Exception – компілятор
перевіряє чи передбачена
обробка помилок
Механізм обробки винятків
13/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Механізм обробки винятків
Потік обчислень відновлюється, причому виконується код
обробника виключення
Створюється і «викидається» об'єкт виключення, що містить
інформацію про помилку
Виконання поточного потоку обчислень призупиняється
Завершується виконання блоків і методів в ланцюжку
викликів аж до коду, що відловлює виняток
14/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Пошук обробника виключення
Main(string[] args)
Стеквикликуметодів
obj1.method1()
Class1.staticMethod()
obj2.methodN()
obj3.methodM()
Exception
Class1.staticMethod()
пошук
обробника
знайдений
obj4.methodL()
Exception
пошук
обробника
не знайдений
CLR
15/50Ковалюк Т.В. Обробка виключних ситуацій на C#
 Носять передбачуваний характер
 Вказуються в оголошенні методу
 Успадковують від класу Exception
Зумовлені логікою коду
Не вказуються в оголошенні методу
Успадковують від класів
RuntimeException, Error
Класифікація виключень
16/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Класифікація виключень
Синхронні
 Безпосередній результат
виконання певної інструкції
 Можуть бути оголошені і
неоголошені
Асинхронні
 Не залежать від виконуваної
інструкції
 Внутрішні помилки CLR
 Результат роботи deprecated
методів
Ковалюк Т.В. Обробка виключних ситуацій на C# 17/50 17
Класи винятків
У мові програмування С# виняток – це об'єкт, створений при настанні певної виняткової
(помилкової) ситуації. Цей об'єкт містить інформацію, яка може допомогти відстежити
причину виникнення проблеми.
Найбільш загальний клас винятків, System.Exception, успадкований від System.Object.
Від System.Exception в ієрархії успадковується два важливих класи:
1. System. SystemException – цей клас передбачений для винятків, які зазвичай генерує
виконуюча система .NET, або ж які мають деяку загальну природу і можуть бути
згенеровані майже будь-яким додатком.
2. System.ApplicationException – цей клас є базовим для будь-якого класу винятків,
обумовлених незалежними розробниками. Якщо програміст визначає будь-яке
виключення, що обслуговують унікальні помилкові ситуації у своїх програмах, то він
повинен наслідувати їх – напряму або ж через посередників – від
System.ApplicationException.
Ковалюк Т.В. Обробка виключних ситуацій на C# 18/50 18
Ієрархія класів винятків
19/50Ковалюк Т.В. Обробка виключних ситуацій на C# 19
Виняток IndexOutOfRangeException виникає у випадках:
 Неприпустимий індекс використовується для доступу до члена масиву
або колекції;
 Спроба приcвоїти елемент масиву іншому масиву, який не має
достатнього розміру і має менше елементів, ніж вихідний масив
 Використання значення, що повертається методом пошуку для ітерації
частини масиву або колекції, починаючи з певної позиції індексу.
Ієрархія винятків: Виняток IndexOutOfRangeException
Найбільш часті причини цієї помилки:
 Забувають, що верхня межа колекції або масиву, який починається з нуля, є на одиницю
менше, ніж кількість елементів масиву або колекції
Виправлення помилки:
Замість перебору всіх елементів масиву за індексом можна використовувати оператор foreach
20/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Ієрархія винятків: Виняток IndexOutOfRangeException
//error
21/50Ковалюк Т.В. Обробка виключних ситуацій на C# 21
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
List<Char> characters = new List<Char>();
characters.InsertRange(0, new Char[] { 'a', 'b', 'c', 'd', 'e', 'f' } );
for (int ctr = 0; ctr < characters.Count; ctr++)
Console.Write("'{0}' ", characters[ctr]);
}
}
// The example displays the following output:
// 'a' 'b' 'c' 'd' 'e' 'f'
Ієрархія винятків: Виняток IndexOutOfRangeException
Правильний
варіант коду
22/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Ієрархія винятків: Виняток IndexOutOfRangeException
//7 елементів масиву
//6 елементів масиву
23/50Ковалюк Т.В. Обробка виключних ситуацій на C# 23
Використання значення, що повертається методом пошуку для ітерації частини масиву або колекції, починаючи з певної
позиції індексу. Якщо ви забули перевірити, чи знайшла операція пошуку збіг, виконавча програма створює виняток
IndexOutOfRangeException. Щоб виправити цю помилку, перед перебором масиву перевірте значення, що повертається
методом пошуку
using System;
using System.Collections.Generic;
public class Example
{
static List<int> numbers = new List<int>();
public static void Main()
{
int startValue;
string[] args = Environment.GetCommandLineArgs();
if (args.Length < 2) startValue = 2;
else
if (! Int32.TryParse(args[1], out startValue))
startValue = 2;
ShowValues(startValue);
}
private static void ShowValues(int startValue)
{
// Create a collection with numeric values.
if (numbers.Count == 0)
numbers.AddRange( new int[] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22} );
// Get the index of a startValue.
Console.WriteLine("Displaying values greater than or equal to {0}:",
startValue);
int startIndex = numbers.IndexOf(startValue);
// Display all numbers from startIndex on.
for (int ctr = startIndex; ctr < numbers.Count; ctr++)
Console.Write(" {0}", numbers[ctr]);
}
}
// The example displays the following output if the user supplies
// 7 as a command-line parameter:
// Displaying values greater than or equal to 7:
//
// Unhandled Exception: System.ArgumentOutOfRangeException:
// Index was out of range. Must be non-negative and less than the size of the collection.
// Parameter name: index
// at System.Collections.Generic.List`1.get_Item(Int32 index)
// at Example.ShowValues(Int32 startValue)
// at Example.Main()
Ієрархія винятків: Виняток IndexOutOfRangeException
24/50Ковалюк Т.В. Обробка виключних ситуацій на C# 24
Виняток, який видається при спробі разименовання посилання на порожній
об'єкт. NullReferenceException виняток відображає помилку розробника і
виникає в наступних сценаріях:
Ієрархія винятків: Виняток NullReferenceException
 Ви забули створити екземпляр посилального типу. Щоб усунути цю проблему, створіть екземпляр об'єкта,
щоб його значення було не null, викликавши конструктор класу
 Ви забули визначити розмір масиву перед його ініціалізацією. Виняток можна усунути, оголосивши
кількість елементів в масиві перед його ініціалізацією.
 Метод повертає значення null а потім викликається метод , що повертає тип. Щоб усунути цю проблему,
перевірте, яке значення методу повертається, щоб переконатися, що воно не є null перед викликом будь-
якого з його членів.
 Використовується вираз для отримання значення і, незважаючи на те, що перевіряється, чи є значення null,
програма видає виключення NullReferenceException. Це відбувається тому, що одне з проміжних значень у
виразі повертає null. Цей виняток можна виправити, перевіривши значення тих властивостей, які можуть
набути значення null.
 Виконується перерахування елементів масиву, що містять посилальні типи, і спроба обробити один з
елементів викликає виключення NullReferenceException. Виняток можна усунути, перевіривши, чи елемент
набуває значення null перед виконанням будь-якої операції з цим елементом.
25/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Ієрархія винятків: Виняток NullReferenceException
26/50Ковалюк Т.В. Обробка виключних ситуацій на C# 26
Ієрархія винятків: Виняток NullReferenceException
using System;
namespace NullReferenceException1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("NullReferenceException is absent");
int[] values = new int[5]; // int[] values = null
for (int ctr = 0; ctr < 5; ctr++)
values[ctr] = ctr * 2;
foreach (var val in values)
Console.WriteLine(val);
}
}
}
Правильний варіант
27/50Ковалюк Т.В. Обробка виключних ситуацій на C# 27
Ієрархія винятків: Виняток AccessViolationException
Виняток, що виникає при спробі читання або запису в захищену область пам'яті
Виняток AccessViolationException може виникати тільки в небезпечному керованому коді або
при взаємодії керованого коду, що перевіряється, з некерованим кодом:
Порушення прав доступу, що виникає в ненадійному керованому коді, може бути виражено
як виняток NullReferenceException або AccessViolationException залежно від платформи.
Порушення прав доступу в некерованому коді, яке передається в керований код, завжди
упаковується в виняток AccessViolationException.
Знайти і виправити причину виключення AccessViolationException можна так:
 Переконайтеся, що пам'ять, в яку здійснюється доступ, була виділена.
 AccessViolationException виключення завжди створюється спробою доступу до захищеної
пам'яті, тобто для доступу до пам'яті, яка не є виділеної або не належить процесу.
 Автоматичне управління пам'яттю - це одна з служб, які надаються середовищем CLR. Якщо
керований код надає ті самі функціональні можливості, що і некерований код, потрібно
перейти на керований код, щоб скористатися перевагами цієї функції.
28/50Ковалюк Т.В. Обробка виключних ситуацій на C# 28
Ієрархія винятків: Виняток InvalidOperationException
Викликається, коли стан об'єкта не підтримує виклик методу. Наприклад, виключення
InvalidOperationException викликається такими методами, як:
IEnumerator.MoveNext, якщо об'єкти колекції змінюються після створення рахувальника.
ResourceSet.GetString, якщо набір ресурсів закритий до виклику методу.
XContainer.Add, якщо об'єкти, що ждодаються, призведуть до неправильного
структурованого XML-документу.
Метод, який намагається керувати призначеним для користувача інтерфейсом з потоку,
який не є основним потоком або потоком користувальницького інтерфейсу.
29/50Ковалюк Т.В. Обробка виключних ситуацій на C# 29
Ієрархія винятків: Виняток ArgumentException
ArgumentException виникає при виклику методу, якщо принаймні один з переданих
аргументів не відповідає специфікації параметра методу, що викликається.
Найчастіше ArgumentException викликається середовищем CLR або іншою бібліотекою класів і
вказує на помилку розробника.
Класи ArgumentNullException і ArgumentOutOfRangeException є похіднми від класу
ArgumentException.
Ці похідні класи слід використовувати замість ArgumentException, за винятком випадків, коли
жоден з похідних класів не є прийнятним.
Виключення повинні створюватися таким чином:
ArgumentNullException, коли null передається в метод, який не приймає його в якості
допустимого аргументу.
ArgumentOutOfRangeException, якщо значення аргументу виходить за межі допустимих
значень.
Якщо у виклику методу немає аргументів або якщо помилка не торкається самі аргументи,
то слід використовувати InvalidOperationException.
Ковалюк Т.В. Обробка виключних ситуацій на C# 30/50
Зазвичай система сама генерує виключення за певних ситуаціях, наприклад, при діленні числа на
нуль. Але мова C# дозволяє генерувати виключення вручну за допомогою оператора throw.
Використовуючи оператор throw, програміст може створити виняток і викликати його в процесі
виконання.
Наприклад, в програмі відбувається введення рядка довжиною не більше 10 символів. Якщо
довжина рядка буде більша за 10 символів, виникає виняток:
Генерація винятку і оператор throw
Після оператора throw вказується об'єкт виключення, через конструктор якого можна передати
повідомлення про помилку.
Замість типу Exception можна використовувати об'єкт будь-якого іншого типу винятків.
31/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Приклад генерації винятку і оператор throw
32/50Ковалюк Т.В. Обробка виключних ситуацій на C#
32
Загальні правила роботи з винятками
 Кожний виняток має як формальну причину виникнення, так і
фактичну.
 Виняток потрібно відловлювати і обробляти на тому рівні (по стеку,
порядку виклику методів), де його:
 можна обробити;
 має сенс обробляти.
 Обробка винятків не зводиться до виведення тільки повідомлень
на консоль і запису в журнал (logger)!
 Обробка винятків означає виконання таких дій, які
забезпечуватимуть надійний режим роботи програми без її
примусового переривання.
33/50Ковалюк Т.В. Обробка виключних ситуацій на C#
33
Обробка виняткових ситуацій. Блок try-catch
 Винятки в C # обробляються з використанням конструкції try-
catch.
 Програмний код, виконання якого може призвести до
виникнення виняткових ситуацій або помилок слід поміщати в
блок try.
 Блок catch призначений для самої обробки.
 Обробка виняткової ситуації зазвичай містить інструкції для
запису повідомлення про помилку в журнал помилок програми.
Цей процес може також супроводжуватися виведенням
повідомлення про помилку на екран.
 Потім записують дії, що усувають наслідки виняткової ситуації
або ж виняток збуджується знову, щоб бути обробленим на
іншому архітектурному рівні програми.
 Слід враховувати, що виняткові ситуації, які виникають в ході
виконання коду блоку catch, вже не перехоплюються поточним
оператором try-catch, тому в блоці catch потрібно намагатися
розміщувати "безпечний" код.
34/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Блок try
try
{
Інструкції
}
catch (Тип_винятку1 ідентифікатор_1)
{
Інструкції
}
catch (Тип_винятку2 ідентифікатор_2)
{
Інструкції
}
…..
Блок try містить в собі код, що виконується успішно при
нормальних обставинах
Тіло блоку try виконується до:
 Моменту виникнення виняткової ситуації
 Благополучного досягнення кінця блоку
Конкретний блок в процесі виконання може викинути
тільки один виняток
35/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Блок catch
try
{
Інструкції
}
catch (Тип_винятку1 ідентифікатор_1)
{
Інструкції
}
catch (Тип_винятку2 ідентифікатор_2)
{
Інструкції
}
…..
Блок catch - це метод з параметром типу виняток, який
їм обробляється
Блок catch здатний:
 Виконати деякі відновлювальні дії.
 Викинути власний виняток.
 Здійснити необхідні дії і передати управління
подальшим інструкціям.
 Кількість блоків catch не регламентована.
 Блоки catch розглядаються послідовно до
виявлення серед них того, тип якого допускає
присвоєння викинутого винятку.
 Не слід використовувати широкий тип винятку,
наприклад, Exception в якості перехоплюваног.
 Список блоків catch переглядається тільки один
раз!
36/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Блок finally
Блок finally виконується в будь-якому випадку:
 При успішному виконанні try.
 При викиданні виключення.
 При передачі управління з break або return!
Блок finally необов'язковий.
Якщо є finally, блоки catch необов'язкові.
Якщо присутній finally, то виконується після
завершення роботи інших фрагментів коду try.
Часто блок finally опускається, коли обробка
виключення має на увазі нормальне подальше
виконання програми - тому блок finally може бути
просто замінений звичайним кодом, який слідує за
блоками try і catch.
try
{
/* код, який може кинути виняток */
}
catch (Exception)
{
/* обробник винятку */
}
finally
{
/* Код, який буде виконаний, незалежно
від того, був викинутий/ перехоплений
виняток, чи ні */
}
37/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Блок-схеми
обробки
винятку
try-catch
try-catch-finally
Ковалюк Т.В. Обробка виключних ситуацій на C# 38/50
Стек винятків. Пошук блоку catch при обробці винятків
Якщо код, який викидає виняток, не розміщується в блоці try, або знаходиться в конструкції
try..catch, що не містить відповідного блоку catch для обробки винятку, то система здійнює
пошук відповідного обробника в стеку викликів.
Початок
Main()
Method1()
Method2()
DivideByZeroException
Кінець
Приклад
структури
програми
Результат виконання програмиСтек виклику
функцій
Main()
Method1()
Method2()
39/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Приклад стеку винятків
using System;
namespace stackException
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Example Stack Exception - tracing activities");
try
{
Console.WriteLine("try in Main");
TestClass.Method1();
}
catch (DivideByZeroException ex)
{
Console.WriteLine($"Catch в Main : {ex.Message}");
}
finally
{
Console.WriteLine("Блок finally в Main");
}
Console.WriteLine("End of Main");
Console.Read();
} //end of Main()
} //end of class Program
} //end of namespace stackException
40/50Ковалюк Т.В. Обробка виключних ситуацій на C#
using System;
namespace stackException
{
class TestClass
{
/// метод Method1 викликає Method2, який генерує виняток
public static void Method1()
{
try
{
Console.WriteLine("try in Method1");
Method2();
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine($"Catch в Method1:{ex.Message}");
}
finally
{
Console.WriteLine("Блок finally в Method1");
}
Console.WriteLine("Кiнець методу Method1");
} //end of Method1()
/// метод, що генерує виняток DivideByZeroException
static void Method2()
{
try
{
Console.WriteLine("try in Method2");
int x = 8;
int y = x / 0; //виняток – ділення на нуль
}
finally
{
Console.WriteLine("Блок finally в Method2");
}
Console.WriteLine("Кiнець методу Method2");
} // end of Method2()
} // end class TestClass
} // end of namespace
Приклад стеку винятків
41/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Оператор throw без параметрів
Зазвичай система сама генерує виключення за певних ситуаціях, наприклад, при діленні числа на
нуль. Але мова C # також дозволяє генерувати виключення вручну за допомогою оператора throw.
Після оператора throw вказується об'єкт виключення, через конструктор якого можна передати
повідомлення про помилку.
Але існує інша форма використання оператора throw, коли після цього оператора не
вказується об'єкт виключення.
У подібному вигляді оператор throw може використовуватися тільки в блоці catch і
означає, що виняток буде переданий зовнішньому блоку catch.
Ковалюк Т.В. Обробка виключних ситуацій на C# 42/50 42
Створення користувацьких класів винятків
Можна створити свої типи
винятків. Базовим класом для
всіх винятків є клас Exception,
відповідно для створення
своїх типів програміст може
успадкувати даний клас.
Нехай в програмі буде
обмеження за віком особи
(наприклад, участь у виборах):
using System;
namespace userexcept
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("User exception example.");
try
{
Person p = new Person { accessName = "Ivan", accessAge = 17 };
}
catch (PersonException ex)
{
Console.WriteLine($"Помилка: {ex.Message}");
Console.WriteLine($"Некоректне значення: {ex.Value}");
}
Console.Read();
}
}
}
43/50Ковалюк Т.В. Обробка виключних ситуацій на C# 43
Створення користувацьких класів винятків
У класі Person при
установці віку відбувається
перевірка, і якщо вік
менше 18, то викидається
виключення.
namespace userexcept {
class Person
{
private int age;
private string Name;
public string accessName { get; set; }
public int accessAge {
get { return age; }
set {
if (value < 18) {
throw new PersonException("Особам до 18 реєстрацiя заборонена",value);
}
else {
age = value;
}
}
}
}
}
44/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Створення користувацьких класів винятків
Іноді зручніше використовувати свої класи
виключень. Наприклад, ми хочемо обробити тільки
ті винятки, які відносяться до класу Person. Для цих
цілей ми можемо зробити спеціальний клас
PersonException:
using System;
namespace userexcept
{
class PersonException : ArgumentException
{
public int Value { get; }
public PersonException(string message, int val)
: base(message )
{
Value = val;
}
}
}
У конструкторі класу PersonException звертаємося
до конструктора базового класу
ArgumentException, передаючи в нього рядок
message і значення, яке хочемо зберігати. Клас
Person викидатиме виключення саме цього типу і
відповідно в основній програмі оброблятиметься
цей виняток.
Клас ArgumentException представляє виняток, що
генерується в результаті передачі аргументу методу
некоректного значення.
45/50Ковалюк Т.В. Обробка виключних ситуацій на C#
Щоб код класу призначеного для користувача виключення відповідав рекомендаціям .NET,
потрібно дотримуватися наступних правил:
клас виключення повинен успадковуватися від Exception / ApplicationException;
клас повинен бути позначений атрибутом [System.Serializable];
клас повинен визначати стандартний конструктор;
клас повинен визначати конструктор, який встановлює значення успадкованої властивості
Message;
клас повинен визначати конструктор для обробки "внутрішніх винятків";
клас повинен визначати конструктор для підтримки серіалізації типу.
Як правильно створювати користувацькі виключення в C #
Ковалюк Т.В. Обробка виключних ситуацій на C# 46/50 46
Чого слід уникати при виклику винятків
1. Винятки не рекомендується використовувати для зміни потоку програми в рамках
звичайного виконання. Винятки слід використовувати тільки для повідомлення про стани
помилки та їх обробки.
2. Винятки повинні генеруватися, а не повертатися в якості значення, що повертається або
параметра.
3. Не слід викликати System.Exception, System.SystemException,
System.NullReferenceException або System.IndexOutOfRangeException з власного вихідного
коду навмисно.
4. Не рекомендується створювати винятки, які можуть викликатися в режимі налагодження, а
не в режимі виконання. Щоб визначити помилки часу виконання на етапі розробки,
використовуйте Debug Assert.
Ковалюк Т.В. Обробка виключних ситуацій на C# 47/50 47
1. На кожному архітектурному рівні намагайтеся обробляти тільки "свої" винятки, а обробку
інших залишайте більш компетентним обробникам інших рівнів вашої програми.
2. Намагайтеся в розумних межах використовувати свої власні класи винятків з тим, щоб
передавати специфічні для кожної окремої ситуації дані, необхідні для повної діагностики
помилок.
3. Також, використовуйте свої класи винятків для того щоб приховати від користувачів ваших
програмних компонентів деталі їх реалізації. У деяких ситуаціях це може бути вкрай
корисним, оскільки ваші творіння можуть потрапити і в руки конкурентів.
4. Намагайтеся завжди використовувати винятки для обробки позаштатних ситуацій крім, хіба
що, тих випадків, коли ви серйозно обмежені в обсягах використовуваної оперативної
пам'яті. В умовах подібних обмежень можна звернутися до старих добрих цілочисельних
кодів помилок.
5. Використовуйте винятки за призначенням.
Рекомендації з використання винятків
Ковалюк Т.В. Обробка виключних ситуацій на C# 48/50 48
Контрольні запитання
Що буде, якщо виняток згенерований у
блоці finally?
Конструктор не виконається до кінця і об’єкт
буде не доініціалізований
Що буде, якщо виняток згенерований в
статичному конструкторі?
Обробник винятку не буде знайдений і робота
програми буде перервана
Що буде, якщо виняток
використовується оператор throw без
параметрів?
Управління буде передане на рівень вище того,
де записаний throw
Компілятор буде змушений видалити в повному
обсязі звільнений об'єкт, або об'єкт залишиться
існуючим, тобто виникне витік пам'яті.
Що буде, якщо виняток згенерований в
дестукторі?
Ковалюк Т.В. Обробка виключних ситуацій на C# 49/50 49
Література та джерела
1. Обработка и создание исключений в .NET. Режим доступу: https://docs.microsoft.com/ru-
ru/dotnet/standard/exceptions/
2. Полное руководство по языку программирования С# 8.0 и платформе .NET Core 3. Режим доступу:
https://metanit.com/sharp/tutorial/
3. Курс программирования C# Quick Guide. Режим доступу
http://codingcraft.ru/c_sharp_coding/tutorial.php#contents
4. Парфьонов Ю. Е. Федорченко В. М. Лосєв М. Ю. Щербаков О. В. ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ. –
Харків : Вид. ХНЕУ, 2010. – 312 с. Режим доступу:
http://www.repository.hneu.edu.ua/bitstream/123456789/2750/1/%D0%9E%D0%B1%E2%80%99%D1%94%D0%BA%
D1%82%D0%BD%D0%BE-
%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5%20%D0%BF%D1%8
0%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F.%20%D0%9A%D0%
BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BB%D0%B5%D0%BA%D1%86%D1%96%D0%B9.%20
%D0%A9%D0%B5%D1%80%D0%B1%D0%B0%D0%BA%D0%BE%D0%B2%20%D0%9E.%20%D0%92..pdf
5. Обработка исключений. Режим доступу:
https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B
8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B9
6. Создание пользовательских исключений с локализованными сообщениями об исключениях.
https://docs.microsoft.com/ru-ru/dotnet/standard/exceptions/how-to-create-localized-exception-messages
Ковалюк Т.В. Обробка виключних ситуацій на C# 50/50 50
IndexOutOfRangeException Класс
https://docs.microsoft.com/ru-ru/dotnet/api/system.indexoutofrangeexception?view=netcore-3.1
https://docs.microsoft.com/ru-ru/dotnet/api/system.nullreferenceexception?view=netcore-3.1
https://metanit.com/sharp/tutorial/2.30.php
Ковалюк Т.В. Обробка виключних ситуацій на C# 51/50
Дякую за увагу
Т.В. Ковалюк, к.т.н.,доцент
tkovalyuk@ukr.net

More Related Content

What's hot

Tugas auditing ii bab 16 alvin arrens
Tugas auditing ii bab 16 alvin arrensTugas auditing ii bab 16 alvin arrens
Tugas auditing ii bab 16 alvin arrensSeh Wahyu Lestari
 
Chapter 08 piutang-pertemuan ke-2
Chapter 08 piutang-pertemuan ke-2Chapter 08 piutang-pertemuan ke-2
Chapter 08 piutang-pertemuan ke-2Majid
 
Jenis- Jenis Laporan keuangan
Jenis- Jenis Laporan keuanganJenis- Jenis Laporan keuangan
Jenis- Jenis Laporan keuanganVanya Angellista
 
Kecerdasan Buatan (AI)
Kecerdasan Buatan (AI)Kecerdasan Buatan (AI)
Kecerdasan Buatan (AI)Farichah Riha
 
3 analisis transaksi (jurnal)
3   analisis transaksi (jurnal)3   analisis transaksi (jurnal)
3 analisis transaksi (jurnal)Mainatul Ilmi
 
Nilai Waktu dari Uang
Nilai Waktu dari UangNilai Waktu dari Uang
Nilai Waktu dari Uangdindasptnt
 
Metode penelitian 3+4
Metode penelitian 3+4Metode penelitian 3+4
Metode penelitian 3+4Jauhar Anam
 
Pertemuan 4-metode-pencarian-dan-pelacakan
Pertemuan 4-metode-pencarian-dan-pelacakanPertemuan 4-metode-pencarian-dan-pelacakan
Pertemuan 4-metode-pencarian-dan-pelacakanwillyhayon
 
Pengauditan Siklus Penjualan dan penjualan
Pengauditan Siklus Penjualan dan penjualanPengauditan Siklus Penjualan dan penjualan
Pengauditan Siklus Penjualan dan penjualanBrianCris2
 
ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)
ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)
ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)Ancilla Kustedjo
 
Proposal kewirausahaan 3-pembiayaan-usaha
Proposal kewirausahaan 3-pembiayaan-usahaProposal kewirausahaan 3-pembiayaan-usaha
Proposal kewirausahaan 3-pembiayaan-usahaPriska Setiyowati
 
Uji Hipotesis Dua Rata-rata
Uji Hipotesis Dua Rata-rataUji Hipotesis Dua Rata-rata
Uji Hipotesis Dua Rata-ratasilvia kuswanti
 
Bab 8. Perlindungan dan Pemulihan Data
Bab 8. Perlindungan dan Pemulihan DataBab 8. Perlindungan dan Pemulihan Data
Bab 8. Perlindungan dan Pemulihan DataZaenal Abidin
 
Riset Operasi Penugasan.ppt
Riset Operasi Penugasan.pptRiset Operasi Penugasan.ppt
Riset Operasi Penugasan.pptBastianElvn
 

What's hot (20)

Uji hipotesis 2 rata rata
Uji hipotesis 2 rata rataUji hipotesis 2 rata rata
Uji hipotesis 2 rata rata
 
Tugas auditing ii bab 16 alvin arrens
Tugas auditing ii bab 16 alvin arrensTugas auditing ii bab 16 alvin arrens
Tugas auditing ii bab 16 alvin arrens
 
Chapter 08 piutang-pertemuan ke-2
Chapter 08 piutang-pertemuan ke-2Chapter 08 piutang-pertemuan ke-2
Chapter 08 piutang-pertemuan ke-2
 
Jenis- Jenis Laporan keuangan
Jenis- Jenis Laporan keuanganJenis- Jenis Laporan keuangan
Jenis- Jenis Laporan keuangan
 
Kecerdasan Buatan (AI)
Kecerdasan Buatan (AI)Kecerdasan Buatan (AI)
Kecerdasan Buatan (AI)
 
WAWANCARA DAN INTEROGASI, OPERASI PENYAMARAN DAN PENIUP PELUIT
WAWANCARA DAN INTEROGASI, OPERASI PENYAMARAN  DAN PENIUP PELUITWAWANCARA DAN INTEROGASI, OPERASI PENYAMARAN  DAN PENIUP PELUIT
WAWANCARA DAN INTEROGASI, OPERASI PENYAMARAN DAN PENIUP PELUIT
 
3 analisis transaksi (jurnal)
3   analisis transaksi (jurnal)3   analisis transaksi (jurnal)
3 analisis transaksi (jurnal)
 
Algoritma Greedy
Algoritma GreedyAlgoritma Greedy
Algoritma Greedy
 
Nilai Waktu dari Uang
Nilai Waktu dari UangNilai Waktu dari Uang
Nilai Waktu dari Uang
 
Metode penelitian 3+4
Metode penelitian 3+4Metode penelitian 3+4
Metode penelitian 3+4
 
Uji Kruskal Wallis
Uji Kruskal WallisUji Kruskal Wallis
Uji Kruskal Wallis
 
Pertemuan 4-metode-pencarian-dan-pelacakan
Pertemuan 4-metode-pencarian-dan-pelacakanPertemuan 4-metode-pencarian-dan-pelacakan
Pertemuan 4-metode-pencarian-dan-pelacakan
 
Uji Rata-Rata
Uji Rata-RataUji Rata-Rata
Uji Rata-Rata
 
Pengauditan Siklus Penjualan dan penjualan
Pengauditan Siklus Penjualan dan penjualanPengauditan Siklus Penjualan dan penjualan
Pengauditan Siklus Penjualan dan penjualan
 
ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)
ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)
ESPA 4123 - Statistika Ekonomi Modul 6 : Estimasi (Pendugaan Statistik)
 
Proposal kewirausahaan 3-pembiayaan-usaha
Proposal kewirausahaan 3-pembiayaan-usahaProposal kewirausahaan 3-pembiayaan-usaha
Proposal kewirausahaan 3-pembiayaan-usaha
 
Uji Hipotesis Dua Rata-rata
Uji Hipotesis Dua Rata-rataUji Hipotesis Dua Rata-rata
Uji Hipotesis Dua Rata-rata
 
Konsep dasar analisis
Konsep dasar analisisKonsep dasar analisis
Konsep dasar analisis
 
Bab 8. Perlindungan dan Pemulihan Data
Bab 8. Perlindungan dan Pemulihan DataBab 8. Perlindungan dan Pemulihan Data
Bab 8. Perlindungan dan Pemulihan Data
 
Riset Operasi Penugasan.ppt
Riset Operasi Penugasan.pptRiset Operasi Penugasan.ppt
Riset Operasi Penugasan.ppt
 

Similar to C# oop exception

08 Exceptions and AOP
08  Exceptions and AOP08  Exceptions and AOP
08 Exceptions and AOPeleksdev
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3eleksdev
 
.NET Platform. C# Basics
.NET Platform. C# Basics.NET Platform. C# Basics
.NET Platform. C# Basicseleksdev
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. MuzychushunHRdepartment
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаютьсяcit-cit
 
Net framework і c# module 5
Net framework і c# module 5Net framework і c# module 5
Net framework і c# module 5Andrii Hladkyi
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasAllaGureva
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_netRingonoki
 
конспект уроку налагодження програм
конспект уроку налагодження програмконспект уроку налагодження програм
конспект уроку налагодження програмtan4ikbah
 
програміст (1)
програміст (1)програміст (1)
програміст (1)123467890qq
 
опорні схеми
опорні схемиопорні схеми
опорні схемиIrina Tabanets
 
"Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an..."Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an...Fwdays
 

Similar to C# oop exception (20)

C# OOP exception
C# OOP exceptionC# OOP exception
C# OOP exception
 
08 Exceptions and AOP
08  Exceptions and AOP08  Exceptions and AOP
08 Exceptions and AOP
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3
 
.NET Platform. C# Basics
.NET Platform. C# Basics.NET Platform. C# Basics
.NET Platform. C# Basics
 
dfgInf tema 1_urok_4_6_klas
dfgInf tema 1_urok_4_6_klasdfgInf tema 1_urok_4_6_klas
dfgInf tema 1_urok_4_6_klas
 
04
0404
04
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. Muzychushun
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klas
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаються
 
Net framework і c# module 5
Net framework і c# module 5Net framework і c# module 5
Net framework і c# module 5
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klas
 
6 клас урок 4
6 клас урок 46 клас урок 4
6 клас урок 4
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_net
 
Debug (ukr)
Debug (ukr)Debug (ukr)
Debug (ukr)
 
1 4
1 41 4
1 4
 
конспект уроку налагодження програм
конспект уроку налагодження програмконспект уроку налагодження програм
конспект уроку налагодження програм
 
cpp-2013 #20 Best practices
cpp-2013 #20 Best practicescpp-2013 #20 Best practices
cpp-2013 #20 Best practices
 
програміст (1)
програміст (1)програміст (1)
програміст (1)
 
опорні схеми
опорні схемиопорні схеми
опорні схеми
 
"Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an..."Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an...
 

Recently uploaded

Р.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняР.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняAdriana Himinets
 
Презентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptxПрезентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptxOlgaDidenko6
 
Бомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентаціяБомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентаціяssuser0a4f48
 
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»tetiana1958
 
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.pptЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.pptssuser59e649
 
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості  та дозвілля для дітейpptxБібліотека – розвиток дитячої творчості  та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptxssuserc301ed1
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfssuser54595a
 
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdfЗастосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdfssuser15a891
 
атестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdfатестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdfhome
 
Іваніщук Надія Вікторівна атестація .pdf
Іваніщук Надія Вікторівна атестація  .pdfІваніщук Надія Вікторівна атестація  .pdf
Іваніщук Надія Вікторівна атестація .pdfhome
 
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...JurgenstiX
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяAdriana Himinets
 
Хімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класХімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класkrementsova09nadya
 

Recently uploaded (14)

Р.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняР.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповідання
 
Презентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptxПрезентациія для сайта Група «Незабудка».pptx
Презентациія для сайта Група «Незабудка».pptx
 
Бомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентаціяБомбочки для ванни своїми руками презентація
Бомбочки для ванни своїми руками презентація
 
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
 
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.pptЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
ЛЕКЦІЯ Засоби масової інформації –важливий інструмент ПР.ppt
 
Віртуальна виставка нових надходжень 2-24.pptx
Віртуальна виставка нових надходжень 2-24.pptxВіртуальна виставка нових надходжень 2-24.pptx
Віртуальна виставка нових надходжень 2-24.pptx
 
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості  та дозвілля для дітейpptxБібліотека – розвиток дитячої творчості  та дозвілля для дітейpptx
Бібліотека – розвиток дитячої творчості та дозвілля для дітейpptx
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
 
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdfЗастосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
Застосування Гайду безбар’єрності в роботі закладів культури громад Одещини.pdf
 
атестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdfатестація 2023-2024 Kewmrbq wtynh GNJ.pdf
атестація 2023-2024 Kewmrbq wtynh GNJ.pdf
 
Іваніщук Надія Вікторівна атестація .pdf
Іваніщук Надія Вікторівна атестація  .pdfІваніщук Надія Вікторівна атестація  .pdf
Іваніщук Надія Вікторівна атестація .pdf
 
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. Біографія
 
Хімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класХімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 клас
 

C# oop exception

  • 1. Ковалюк Т.В. Обробка виключних ситуацій на C# 1/50 1 Лектор доцент кафедри ПСТ ФІТ КНУ імені Тараса Шевченка Ковалюк Т.В. , к.т.н.
  • 2. 2/50Ковалюк Т.В. Обробка виключних ситуацій на C# План лекції 4 Постановка проблеми та її актуальність1 2 3 5 Мета та завдання лекції Поняття винятків Приклади винятків 6 Класи винятків в С# 7 Генерація винятків і оператор throw 8 Створення користувацьких класів винятків 9 Контрольні запитання 10 Література та джерела Обробка винятків. Блоки try, catch, finally
  • 3. 3/50Ковалюк Т.В. Обробка виключних ситуацій на C# Постановка проблеми та її актуальність Вимоги щодо обробки збоїв в програмі Не допускати повного "розвалу" системи Заносити всі випадки аномального поведінки в журнал Гарантувати відновлення системи до стану, що був до виникнення збою Надавати вичерпну інформацію про помилку, необхідну для її діагностики 1 2 3 4 Не та програма працює коректно, яка зовсім не дає збоїв, а та, яка їх коректно обробляє і дає вичерпну інформацію, необхідну для всебічної діагностики нештатної ситуації.
  • 4. 4/50Ковалюк Т.В. Обробка виключних ситуацій на C# 1 2 3 4 Мета та завдання лекції Набуття практичних навичок щодо обробки виняткових ситуацій та недопущення логічних помилок в програмі мовою програмування C# Мета: Завдання:
  • 5. 5/50Ковалюк Т.В. Обробка виключних ситуацій на C# Виконання некоректного програмного коду Порушення обмежень середовища виконання програми Збої обладнання Причини помилок в програмі Некоректне введення даних
  • 6. 6/50Ковалюк Т.В. Обробка виключних ситуацій на C#  Винятки (Exceptions) - це тип помилки, яка відбувається під час виконання програми.  Помилки зазвичай означають появу несподіваних проблем і можуть привести до непередбаченого завершення програми.  Виняткові ситуації - це незвичайні неочікувані обставини, що виникають під час роботи програми, це аномальна поведінка під час виконання програми, що перешкоджають успішному виконанню конкретного завдання.  Винятки порушують нормальний хід роботи програми, і на них треба негайно відреагувати Поняття винятків Винятки, обробка яких організована в коді, є очікуваними
  • 7. 7/50Ковалюк Т.В. Обробка виключних ситуацій на C# Доступ до елементу поза межами масиву Спроба відкрити файл, якого не існує Конвертація некоректних даних з одного типу в інший Вичерпування пам'яті програми Арифметичні помилки: ділення на нуль, корінь з від’ємного числа… Приклади помилок (винятків) та багато інших
  • 8. Ковалюк Т.В. Обробка виключних ситуацій на C# 8/50 8  Безпека програмного забезпечення в процесі виконання. Призначення обробників винятків C # може обробляти різні типи винятків за допомогою механізму обробки винятків.  Забезпечення стабільності та надійності роботи програми. Обробка винятків - процес обробки помилок часу виконання  Дружня поведінка закінченого програмного продукту. Обробка винятків вказує на дію, яку необхідно виконати в разі виникнення помилки, щоб запобігти примусовому завершенню програми.  Зручність при написанні програмного коду. Винятки системного рівня викликаються (викидаються) системою. Винятки рівня додатків викликаються самими додатками.
  • 9. 9/50Ковалюк Т.В. Обробка виключних ситуацій на C# Підходи до обробки помилок 1. Повернення тільки коду помилки з методу int errNum = firstMethod(); if (errNum == -1) { // обробка 1-ої помилки } else if (errNum == -2) { // обробка 2-ої помилки } 2. Використання значень типу, що повертається з методу if ((ans = root(value))) < 0) { // обробка помилки } else { // Продовження обчислень } 3. Вбудований в мову механізм перевірки та обробки винятку try { // бізнес-логіка за алгоритмом } catch(Exception1 e1) { // обробка 1-ої помилки } catch(ExceptionN eN) {// обробка N-ої помилки } finally { // виконання дій, що завершують роботу }
  • 10. 10/50Ковалюк Т.В. Обробка виключних ситуацій на C# Переваги та недоліки обробки винятків 1. Винятки відокремлюють код обробки помилок від алгоритму програми, тим самим підвищуючи розбірливість, надійність і розширюваність коду 2. Обробку помилок можна централізувати в аспектах (парадигма аспектно- орієнтованого програмування) 3. Генерація виключення – це єдиний чистий спосіб повідомити про помилку з конструктора 1. Винятки порушують структуру коду, створюючи безліч прихованих точок виходу, що ускладнює читання і вивчення коду. 2. Винятки легко викликають витік ресурсів, особливо в мові, що не має вбудованого збирача сміття і блоків finally в кінці. 3. Якщо виняток виникне в деструкторі, то або компілятор буде змушений видалити в повному обсязі звільнений об'єкт, або об'єкт залишиться існуючим, тобто виникне витік пам'яті..
  • 11. 11/50Ковалюк Т.В. Обробка виключних ситуацій на C# Переваги та недоліки обробки винятків 4. Винятки важко ігнорувати, на відміну від кодів помилок. 5. Винятки легко передаються з глибоко вкладених функцій. 6. Винятки можуть бути обумовленими користувацькими типами, що несуть більше інформації, ніж код помилки 7. Об'єкти винятків зіставляються з обробниками за допомогою системи типів (класів). 8. Винятки можна створювати між різними процесами і навіть комп'ютерами. 9. Неприпустимі значення не поширюються по системі на відміну від обробки кодів помилок. 4. Винятки важко ввести в застарілий код. 5. Реалізація механізму обробки винятків істотно залежить від мови, і навіть компілятори одної і той самої мови можуть мати відмінності. 6. Важко передавати винятки між частинами програми, написаними на різних мовах. 7. Підтримка винятків ускладнює мову і компілятор. Також вона знижує швидкість роботи програми. 8. Виняток (потенційно) може відбутися в будь-якому операторі і аналізом самого коду неможливо дізнатися, де саме виключення можуть відбуватися.
  • 12. 12/50Ковалюк Т.В. Обробка виключних ситуацій на C# Виняток викидається (throw), коли виникає виняткова ситуація. Виняток перехоплюється в програмі (catch) і обробляється. В іншому випадку виняток обробляється за замовчуванням. Throw Error такі, що не перевіряються Exception RuntimeException такі, що не перевіряються Усі інші такі, що перевіряються Error – фатальні помилки RuntimeExcеption – компілятор не вимагає їх обов'язкової обробки Exception – компілятор перевіряє чи передбачена обробка помилок Механізм обробки винятків
  • 13. 13/50Ковалюк Т.В. Обробка виключних ситуацій на C# Механізм обробки винятків Потік обчислень відновлюється, причому виконується код обробника виключення Створюється і «викидається» об'єкт виключення, що містить інформацію про помилку Виконання поточного потоку обчислень призупиняється Завершується виконання блоків і методів в ланцюжку викликів аж до коду, що відловлює виняток
  • 14. 14/50Ковалюк Т.В. Обробка виключних ситуацій на C# Пошук обробника виключення Main(string[] args) Стеквикликуметодів obj1.method1() Class1.staticMethod() obj2.methodN() obj3.methodM() Exception Class1.staticMethod() пошук обробника знайдений obj4.methodL() Exception пошук обробника не знайдений CLR
  • 15. 15/50Ковалюк Т.В. Обробка виключних ситуацій на C#  Носять передбачуваний характер  Вказуються в оголошенні методу  Успадковують від класу Exception Зумовлені логікою коду Не вказуються в оголошенні методу Успадковують від класів RuntimeException, Error Класифікація виключень
  • 16. 16/50Ковалюк Т.В. Обробка виключних ситуацій на C# Класифікація виключень Синхронні  Безпосередній результат виконання певної інструкції  Можуть бути оголошені і неоголошені Асинхронні  Не залежать від виконуваної інструкції  Внутрішні помилки CLR  Результат роботи deprecated методів
  • 17. Ковалюк Т.В. Обробка виключних ситуацій на C# 17/50 17 Класи винятків У мові програмування С# виняток – це об'єкт, створений при настанні певної виняткової (помилкової) ситуації. Цей об'єкт містить інформацію, яка може допомогти відстежити причину виникнення проблеми. Найбільш загальний клас винятків, System.Exception, успадкований від System.Object. Від System.Exception в ієрархії успадковується два важливих класи: 1. System. SystemException – цей клас передбачений для винятків, які зазвичай генерує виконуюча система .NET, або ж які мають деяку загальну природу і можуть бути згенеровані майже будь-яким додатком. 2. System.ApplicationException – цей клас є базовим для будь-якого класу винятків, обумовлених незалежними розробниками. Якщо програміст визначає будь-яке виключення, що обслуговують унікальні помилкові ситуації у своїх програмах, то він повинен наслідувати їх – напряму або ж через посередників – від System.ApplicationException.
  • 18. Ковалюк Т.В. Обробка виключних ситуацій на C# 18/50 18 Ієрархія класів винятків
  • 19. 19/50Ковалюк Т.В. Обробка виключних ситуацій на C# 19 Виняток IndexOutOfRangeException виникає у випадках:  Неприпустимий індекс використовується для доступу до члена масиву або колекції;  Спроба приcвоїти елемент масиву іншому масиву, який не має достатнього розміру і має менше елементів, ніж вихідний масив  Використання значення, що повертається методом пошуку для ітерації частини масиву або колекції, починаючи з певної позиції індексу. Ієрархія винятків: Виняток IndexOutOfRangeException Найбільш часті причини цієї помилки:  Забувають, що верхня межа колекції або масиву, який починається з нуля, є на одиницю менше, ніж кількість елементів масиву або колекції Виправлення помилки: Замість перебору всіх елементів масиву за індексом можна використовувати оператор foreach
  • 20. 20/50Ковалюк Т.В. Обробка виключних ситуацій на C# Ієрархія винятків: Виняток IndexOutOfRangeException //error
  • 21. 21/50Ковалюк Т.В. Обробка виключних ситуацій на C# 21 using System; using System.Collections.Generic; public class Example { public static void Main() { List<Char> characters = new List<Char>(); characters.InsertRange(0, new Char[] { 'a', 'b', 'c', 'd', 'e', 'f' } ); for (int ctr = 0; ctr < characters.Count; ctr++) Console.Write("'{0}' ", characters[ctr]); } } // The example displays the following output: // 'a' 'b' 'c' 'd' 'e' 'f' Ієрархія винятків: Виняток IndexOutOfRangeException Правильний варіант коду
  • 22. 22/50Ковалюк Т.В. Обробка виключних ситуацій на C# Ієрархія винятків: Виняток IndexOutOfRangeException //7 елементів масиву //6 елементів масиву
  • 23. 23/50Ковалюк Т.В. Обробка виключних ситуацій на C# 23 Використання значення, що повертається методом пошуку для ітерації частини масиву або колекції, починаючи з певної позиції індексу. Якщо ви забули перевірити, чи знайшла операція пошуку збіг, виконавча програма створює виняток IndexOutOfRangeException. Щоб виправити цю помилку, перед перебором масиву перевірте значення, що повертається методом пошуку using System; using System.Collections.Generic; public class Example { static List<int> numbers = new List<int>(); public static void Main() { int startValue; string[] args = Environment.GetCommandLineArgs(); if (args.Length < 2) startValue = 2; else if (! Int32.TryParse(args[1], out startValue)) startValue = 2; ShowValues(startValue); } private static void ShowValues(int startValue) { // Create a collection with numeric values. if (numbers.Count == 0) numbers.AddRange( new int[] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22} ); // Get the index of a startValue. Console.WriteLine("Displaying values greater than or equal to {0}:", startValue); int startIndex = numbers.IndexOf(startValue); // Display all numbers from startIndex on. for (int ctr = startIndex; ctr < numbers.Count; ctr++) Console.Write(" {0}", numbers[ctr]); } } // The example displays the following output if the user supplies // 7 as a command-line parameter: // Displaying values greater than or equal to 7: // // Unhandled Exception: System.ArgumentOutOfRangeException: // Index was out of range. Must be non-negative and less than the size of the collection. // Parameter name: index // at System.Collections.Generic.List`1.get_Item(Int32 index) // at Example.ShowValues(Int32 startValue) // at Example.Main() Ієрархія винятків: Виняток IndexOutOfRangeException
  • 24. 24/50Ковалюк Т.В. Обробка виключних ситуацій на C# 24 Виняток, який видається при спробі разименовання посилання на порожній об'єкт. NullReferenceException виняток відображає помилку розробника і виникає в наступних сценаріях: Ієрархія винятків: Виняток NullReferenceException  Ви забули створити екземпляр посилального типу. Щоб усунути цю проблему, створіть екземпляр об'єкта, щоб його значення було не null, викликавши конструктор класу  Ви забули визначити розмір масиву перед його ініціалізацією. Виняток можна усунути, оголосивши кількість елементів в масиві перед його ініціалізацією.  Метод повертає значення null а потім викликається метод , що повертає тип. Щоб усунути цю проблему, перевірте, яке значення методу повертається, щоб переконатися, що воно не є null перед викликом будь- якого з його членів.  Використовується вираз для отримання значення і, незважаючи на те, що перевіряється, чи є значення null, програма видає виключення NullReferenceException. Це відбувається тому, що одне з проміжних значень у виразі повертає null. Цей виняток можна виправити, перевіривши значення тих властивостей, які можуть набути значення null.  Виконується перерахування елементів масиву, що містять посилальні типи, і спроба обробити один з елементів викликає виключення NullReferenceException. Виняток можна усунути, перевіривши, чи елемент набуває значення null перед виконанням будь-якої операції з цим елементом.
  • 25. 25/50Ковалюк Т.В. Обробка виключних ситуацій на C# Ієрархія винятків: Виняток NullReferenceException
  • 26. 26/50Ковалюк Т.В. Обробка виключних ситуацій на C# 26 Ієрархія винятків: Виняток NullReferenceException using System; namespace NullReferenceException1 { class Program { static void Main(string[] args) { Console.WriteLine("NullReferenceException is absent"); int[] values = new int[5]; // int[] values = null for (int ctr = 0; ctr < 5; ctr++) values[ctr] = ctr * 2; foreach (var val in values) Console.WriteLine(val); } } } Правильний варіант
  • 27. 27/50Ковалюк Т.В. Обробка виключних ситуацій на C# 27 Ієрархія винятків: Виняток AccessViolationException Виняток, що виникає при спробі читання або запису в захищену область пам'яті Виняток AccessViolationException може виникати тільки в небезпечному керованому коді або при взаємодії керованого коду, що перевіряється, з некерованим кодом: Порушення прав доступу, що виникає в ненадійному керованому коді, може бути виражено як виняток NullReferenceException або AccessViolationException залежно від платформи. Порушення прав доступу в некерованому коді, яке передається в керований код, завжди упаковується в виняток AccessViolationException. Знайти і виправити причину виключення AccessViolationException можна так:  Переконайтеся, що пам'ять, в яку здійснюється доступ, була виділена.  AccessViolationException виключення завжди створюється спробою доступу до захищеної пам'яті, тобто для доступу до пам'яті, яка не є виділеної або не належить процесу.  Автоматичне управління пам'яттю - це одна з служб, які надаються середовищем CLR. Якщо керований код надає ті самі функціональні можливості, що і некерований код, потрібно перейти на керований код, щоб скористатися перевагами цієї функції.
  • 28. 28/50Ковалюк Т.В. Обробка виключних ситуацій на C# 28 Ієрархія винятків: Виняток InvalidOperationException Викликається, коли стан об'єкта не підтримує виклик методу. Наприклад, виключення InvalidOperationException викликається такими методами, як: IEnumerator.MoveNext, якщо об'єкти колекції змінюються після створення рахувальника. ResourceSet.GetString, якщо набір ресурсів закритий до виклику методу. XContainer.Add, якщо об'єкти, що ждодаються, призведуть до неправильного структурованого XML-документу. Метод, який намагається керувати призначеним для користувача інтерфейсом з потоку, який не є основним потоком або потоком користувальницького інтерфейсу.
  • 29. 29/50Ковалюк Т.В. Обробка виключних ситуацій на C# 29 Ієрархія винятків: Виняток ArgumentException ArgumentException виникає при виклику методу, якщо принаймні один з переданих аргументів не відповідає специфікації параметра методу, що викликається. Найчастіше ArgumentException викликається середовищем CLR або іншою бібліотекою класів і вказує на помилку розробника. Класи ArgumentNullException і ArgumentOutOfRangeException є похіднми від класу ArgumentException. Ці похідні класи слід використовувати замість ArgumentException, за винятком випадків, коли жоден з похідних класів не є прийнятним. Виключення повинні створюватися таким чином: ArgumentNullException, коли null передається в метод, який не приймає його в якості допустимого аргументу. ArgumentOutOfRangeException, якщо значення аргументу виходить за межі допустимих значень. Якщо у виклику методу немає аргументів або якщо помилка не торкається самі аргументи, то слід використовувати InvalidOperationException.
  • 30. Ковалюк Т.В. Обробка виключних ситуацій на C# 30/50 Зазвичай система сама генерує виключення за певних ситуаціях, наприклад, при діленні числа на нуль. Але мова C# дозволяє генерувати виключення вручну за допомогою оператора throw. Використовуючи оператор throw, програміст може створити виняток і викликати його в процесі виконання. Наприклад, в програмі відбувається введення рядка довжиною не більше 10 символів. Якщо довжина рядка буде більша за 10 символів, виникає виняток: Генерація винятку і оператор throw Після оператора throw вказується об'єкт виключення, через конструктор якого можна передати повідомлення про помилку. Замість типу Exception можна використовувати об'єкт будь-якого іншого типу винятків.
  • 31. 31/50Ковалюк Т.В. Обробка виключних ситуацій на C# Приклад генерації винятку і оператор throw
  • 32. 32/50Ковалюк Т.В. Обробка виключних ситуацій на C# 32 Загальні правила роботи з винятками  Кожний виняток має як формальну причину виникнення, так і фактичну.  Виняток потрібно відловлювати і обробляти на тому рівні (по стеку, порядку виклику методів), де його:  можна обробити;  має сенс обробляти.  Обробка винятків не зводиться до виведення тільки повідомлень на консоль і запису в журнал (logger)!  Обробка винятків означає виконання таких дій, які забезпечуватимуть надійний режим роботи програми без її примусового переривання.
  • 33. 33/50Ковалюк Т.В. Обробка виключних ситуацій на C# 33 Обробка виняткових ситуацій. Блок try-catch  Винятки в C # обробляються з використанням конструкції try- catch.  Програмний код, виконання якого може призвести до виникнення виняткових ситуацій або помилок слід поміщати в блок try.  Блок catch призначений для самої обробки.  Обробка виняткової ситуації зазвичай містить інструкції для запису повідомлення про помилку в журнал помилок програми. Цей процес може також супроводжуватися виведенням повідомлення про помилку на екран.  Потім записують дії, що усувають наслідки виняткової ситуації або ж виняток збуджується знову, щоб бути обробленим на іншому архітектурному рівні програми.  Слід враховувати, що виняткові ситуації, які виникають в ході виконання коду блоку catch, вже не перехоплюються поточним оператором try-catch, тому в блоці catch потрібно намагатися розміщувати "безпечний" код.
  • 34. 34/50Ковалюк Т.В. Обробка виключних ситуацій на C# Блок try try { Інструкції } catch (Тип_винятку1 ідентифікатор_1) { Інструкції } catch (Тип_винятку2 ідентифікатор_2) { Інструкції } ….. Блок try містить в собі код, що виконується успішно при нормальних обставинах Тіло блоку try виконується до:  Моменту виникнення виняткової ситуації  Благополучного досягнення кінця блоку Конкретний блок в процесі виконання може викинути тільки один виняток
  • 35. 35/50Ковалюк Т.В. Обробка виключних ситуацій на C# Блок catch try { Інструкції } catch (Тип_винятку1 ідентифікатор_1) { Інструкції } catch (Тип_винятку2 ідентифікатор_2) { Інструкції } ….. Блок catch - це метод з параметром типу виняток, який їм обробляється Блок catch здатний:  Виконати деякі відновлювальні дії.  Викинути власний виняток.  Здійснити необхідні дії і передати управління подальшим інструкціям.  Кількість блоків catch не регламентована.  Блоки catch розглядаються послідовно до виявлення серед них того, тип якого допускає присвоєння викинутого винятку.  Не слід використовувати широкий тип винятку, наприклад, Exception в якості перехоплюваног.  Список блоків catch переглядається тільки один раз!
  • 36. 36/50Ковалюк Т.В. Обробка виключних ситуацій на C# Блок finally Блок finally виконується в будь-якому випадку:  При успішному виконанні try.  При викиданні виключення.  При передачі управління з break або return! Блок finally необов'язковий. Якщо є finally, блоки catch необов'язкові. Якщо присутній finally, то виконується після завершення роботи інших фрагментів коду try. Часто блок finally опускається, коли обробка виключення має на увазі нормальне подальше виконання програми - тому блок finally може бути просто замінений звичайним кодом, який слідує за блоками try і catch. try { /* код, який може кинути виняток */ } catch (Exception) { /* обробник винятку */ } finally { /* Код, який буде виконаний, незалежно від того, був викинутий/ перехоплений виняток, чи ні */ }
  • 37. 37/50Ковалюк Т.В. Обробка виключних ситуацій на C# Блок-схеми обробки винятку try-catch try-catch-finally
  • 38. Ковалюк Т.В. Обробка виключних ситуацій на C# 38/50 Стек винятків. Пошук блоку catch при обробці винятків Якщо код, який викидає виняток, не розміщується в блоці try, або знаходиться в конструкції try..catch, що не містить відповідного блоку catch для обробки винятку, то система здійнює пошук відповідного обробника в стеку викликів. Початок Main() Method1() Method2() DivideByZeroException Кінець Приклад структури програми Результат виконання програмиСтек виклику функцій Main() Method1() Method2()
  • 39. 39/50Ковалюк Т.В. Обробка виключних ситуацій на C# Приклад стеку винятків using System; namespace stackException { class Program { static void Main(string[] args) { Console.WriteLine("Example Stack Exception - tracing activities"); try { Console.WriteLine("try in Main"); TestClass.Method1(); } catch (DivideByZeroException ex) { Console.WriteLine($"Catch в Main : {ex.Message}"); } finally { Console.WriteLine("Блок finally в Main"); } Console.WriteLine("End of Main"); Console.Read(); } //end of Main() } //end of class Program } //end of namespace stackException
  • 40. 40/50Ковалюк Т.В. Обробка виключних ситуацій на C# using System; namespace stackException { class TestClass { /// метод Method1 викликає Method2, який генерує виняток public static void Method1() { try { Console.WriteLine("try in Method1"); Method2(); } catch (IndexOutOfRangeException ex) { Console.WriteLine($"Catch в Method1:{ex.Message}"); } finally { Console.WriteLine("Блок finally в Method1"); } Console.WriteLine("Кiнець методу Method1"); } //end of Method1() /// метод, що генерує виняток DivideByZeroException static void Method2() { try { Console.WriteLine("try in Method2"); int x = 8; int y = x / 0; //виняток – ділення на нуль } finally { Console.WriteLine("Блок finally в Method2"); } Console.WriteLine("Кiнець методу Method2"); } // end of Method2() } // end class TestClass } // end of namespace Приклад стеку винятків
  • 41. 41/50Ковалюк Т.В. Обробка виключних ситуацій на C# Оператор throw без параметрів Зазвичай система сама генерує виключення за певних ситуаціях, наприклад, при діленні числа на нуль. Але мова C # також дозволяє генерувати виключення вручну за допомогою оператора throw. Після оператора throw вказується об'єкт виключення, через конструктор якого можна передати повідомлення про помилку. Але існує інша форма використання оператора throw, коли після цього оператора не вказується об'єкт виключення. У подібному вигляді оператор throw може використовуватися тільки в блоці catch і означає, що виняток буде переданий зовнішньому блоку catch.
  • 42. Ковалюк Т.В. Обробка виключних ситуацій на C# 42/50 42 Створення користувацьких класів винятків Можна створити свої типи винятків. Базовим класом для всіх винятків є клас Exception, відповідно для створення своїх типів програміст може успадкувати даний клас. Нехай в програмі буде обмеження за віком особи (наприклад, участь у виборах): using System; namespace userexcept { class Program { static void Main(string[] args) { Console.WriteLine("User exception example."); try { Person p = new Person { accessName = "Ivan", accessAge = 17 }; } catch (PersonException ex) { Console.WriteLine($"Помилка: {ex.Message}"); Console.WriteLine($"Некоректне значення: {ex.Value}"); } Console.Read(); } } }
  • 43. 43/50Ковалюк Т.В. Обробка виключних ситуацій на C# 43 Створення користувацьких класів винятків У класі Person при установці віку відбувається перевірка, і якщо вік менше 18, то викидається виключення. namespace userexcept { class Person { private int age; private string Name; public string accessName { get; set; } public int accessAge { get { return age; } set { if (value < 18) { throw new PersonException("Особам до 18 реєстрацiя заборонена",value); } else { age = value; } } } } }
  • 44. 44/50Ковалюк Т.В. Обробка виключних ситуацій на C# Створення користувацьких класів винятків Іноді зручніше використовувати свої класи виключень. Наприклад, ми хочемо обробити тільки ті винятки, які відносяться до класу Person. Для цих цілей ми можемо зробити спеціальний клас PersonException: using System; namespace userexcept { class PersonException : ArgumentException { public int Value { get; } public PersonException(string message, int val) : base(message ) { Value = val; } } } У конструкторі класу PersonException звертаємося до конструктора базового класу ArgumentException, передаючи в нього рядок message і значення, яке хочемо зберігати. Клас Person викидатиме виключення саме цього типу і відповідно в основній програмі оброблятиметься цей виняток. Клас ArgumentException представляє виняток, що генерується в результаті передачі аргументу методу некоректного значення.
  • 45. 45/50Ковалюк Т.В. Обробка виключних ситуацій на C# Щоб код класу призначеного для користувача виключення відповідав рекомендаціям .NET, потрібно дотримуватися наступних правил: клас виключення повинен успадковуватися від Exception / ApplicationException; клас повинен бути позначений атрибутом [System.Serializable]; клас повинен визначати стандартний конструктор; клас повинен визначати конструктор, який встановлює значення успадкованої властивості Message; клас повинен визначати конструктор для обробки "внутрішніх винятків"; клас повинен визначати конструктор для підтримки серіалізації типу. Як правильно створювати користувацькі виключення в C #
  • 46. Ковалюк Т.В. Обробка виключних ситуацій на C# 46/50 46 Чого слід уникати при виклику винятків 1. Винятки не рекомендується використовувати для зміни потоку програми в рамках звичайного виконання. Винятки слід використовувати тільки для повідомлення про стани помилки та їх обробки. 2. Винятки повинні генеруватися, а не повертатися в якості значення, що повертається або параметра. 3. Не слід викликати System.Exception, System.SystemException, System.NullReferenceException або System.IndexOutOfRangeException з власного вихідного коду навмисно. 4. Не рекомендується створювати винятки, які можуть викликатися в режимі налагодження, а не в режимі виконання. Щоб визначити помилки часу виконання на етапі розробки, використовуйте Debug Assert.
  • 47. Ковалюк Т.В. Обробка виключних ситуацій на C# 47/50 47 1. На кожному архітектурному рівні намагайтеся обробляти тільки "свої" винятки, а обробку інших залишайте більш компетентним обробникам інших рівнів вашої програми. 2. Намагайтеся в розумних межах використовувати свої власні класи винятків з тим, щоб передавати специфічні для кожної окремої ситуації дані, необхідні для повної діагностики помилок. 3. Також, використовуйте свої класи винятків для того щоб приховати від користувачів ваших програмних компонентів деталі їх реалізації. У деяких ситуаціях це може бути вкрай корисним, оскільки ваші творіння можуть потрапити і в руки конкурентів. 4. Намагайтеся завжди використовувати винятки для обробки позаштатних ситуацій крім, хіба що, тих випадків, коли ви серйозно обмежені в обсягах використовуваної оперативної пам'яті. В умовах подібних обмежень можна звернутися до старих добрих цілочисельних кодів помилок. 5. Використовуйте винятки за призначенням. Рекомендації з використання винятків
  • 48. Ковалюк Т.В. Обробка виключних ситуацій на C# 48/50 48 Контрольні запитання Що буде, якщо виняток згенерований у блоці finally? Конструктор не виконається до кінця і об’єкт буде не доініціалізований Що буде, якщо виняток згенерований в статичному конструкторі? Обробник винятку не буде знайдений і робота програми буде перервана Що буде, якщо виняток використовується оператор throw без параметрів? Управління буде передане на рівень вище того, де записаний throw Компілятор буде змушений видалити в повному обсязі звільнений об'єкт, або об'єкт залишиться існуючим, тобто виникне витік пам'яті. Що буде, якщо виняток згенерований в дестукторі?
  • 49. Ковалюк Т.В. Обробка виключних ситуацій на C# 49/50 49 Література та джерела 1. Обработка и создание исключений в .NET. Режим доступу: https://docs.microsoft.com/ru- ru/dotnet/standard/exceptions/ 2. Полное руководство по языку программирования С# 8.0 и платформе .NET Core 3. Режим доступу: https://metanit.com/sharp/tutorial/ 3. Курс программирования C# Quick Guide. Режим доступу http://codingcraft.ru/c_sharp_coding/tutorial.php#contents 4. Парфьонов Ю. Е. Федорченко В. М. Лосєв М. Ю. Щербаков О. В. ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ. – Харків : Вид. ХНЕУ, 2010. – 312 с. Режим доступу: http://www.repository.hneu.edu.ua/bitstream/123456789/2750/1/%D0%9E%D0%B1%E2%80%99%D1%94%D0%BA% D1%82%D0%BD%D0%BE- %D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5%20%D0%BF%D1%8 0%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F.%20%D0%9A%D0% BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%20%D0%BB%D0%B5%D0%BA%D1%86%D1%96%D0%B9.%20 %D0%A9%D0%B5%D1%80%D0%B1%D0%B0%D0%BA%D0%BE%D0%B2%20%D0%9E.%20%D0%92..pdf 5. Обработка исключений. Режим доступу: https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B 8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B9 6. Создание пользовательских исключений с локализованными сообщениями об исключениях. https://docs.microsoft.com/ru-ru/dotnet/standard/exceptions/how-to-create-localized-exception-messages
  • 50. Ковалюк Т.В. Обробка виключних ситуацій на C# 50/50 50 IndexOutOfRangeException Класс https://docs.microsoft.com/ru-ru/dotnet/api/system.indexoutofrangeexception?view=netcore-3.1 https://docs.microsoft.com/ru-ru/dotnet/api/system.nullreferenceexception?view=netcore-3.1 https://metanit.com/sharp/tutorial/2.30.php
  • 51. Ковалюк Т.В. Обробка виключних ситуацій на C# 51/50 Дякую за увагу Т.В. Ковалюк, к.т.н.,доцент tkovalyuk@ukr.net

Editor's Notes

  1. The objective of the paper is to summarize the issues of cluster purpose structures formation in the educational field. The study of the problem of cluster model development for IT education in Ukraine is necessary to define the conceptual bases for the creation of scientific-industrial-educational clusters to improve the efficiency and quality of training of IT specialists and ensure transition of Ukrainian IT education to the innovative development path.
  2. The digital economy poses new challenges for the education system. To train specialists who meet the requirements of the digital economy development, the technological and information transformation of the university is necessary, which ensures the transition to smart education. Several principles of smart education: creation of motivating educational environment ; development of educational content that is being updated in real time; innovative educational technologies ; Individual educational trajectory; students and teachers interaction with the professional community.