C Sharp/Wyjątki
Wyjątki to mechanizm w programowaniu obiektowym pozwalający łatwo wyłapać błędy. Uwalnia to nas od specjalnych zmiennych i wielu instrukcji warunkowych, żeby sprawdzać czy nastąpił błąd. Jeśli nasz program nie ma w kodzie obsługi wyjątków to w pewnym sensie obsługuje je za nas framework tzn. wypisze komunikat, że nastąpił nieobsłużony wyjątek podając jego nazwę, np. IndexOutOfRangeException (w tłumaczeniu: wyjątek poza zasięgiem indeksu). Do obsługi wyjątków używamy bloku try...catch :
try
{
//blok, w którym może nastąpić wyjątek
}
catch(TypWyjątku identyfikatorWyjątku)
{
//instrukcje do wykonania jeśli wyjątek nastąpi w czasie wykonywania kodu z bloku try
}
finally
{
//instrukcje które wykonają się niezależnie od tego czy wyjątek zostanie wyrzucony czy nie
//blok finally można pominąć
}
Oczywiście można umieścić więcej bloków catch jeśli chcemy. Każdy wtedy będzie się zajmował innym typem wyjątków. Należy pamiętać, że istnieje hierarchia wyjątków:
- Exception
- SystemException
- IndexOutOfRangeException
- SystemException
Należy wyjątki obsługiwać od najniższych do najwyższych w hierarchii. Jeśli pomieszamy hierarchię to kompilator zgłosi błąd, że ten sam wyjątek chcemy obsłużyć drugi raz.
Przykład:
using System;
public
class main
{
public static int Main()
{
int[] tablica = {1,2,3,4,5}
try
{
tablica[5]=6;
}
catch(IndexOutOfRangeException)
{
Console.WriteLine("Nastąpiło odwołanie poza tablicę!!!");
}
return 0;
}
}
Wyrzucanie wyjątków
[edytuj]Możemy również sami wyrzucać wyjątki. Robimy to za pomocą instrukcji throw
using System;
class Program
{
void KupZiemniaki(int ile)
{
if(ile < 0)
{
//nie możemy kupić ujemnej liczby czegoś więc rzucamy wyjątek
//po wykonaniu instrukcji throw program wyjdzie z funkcji KupZiemniaki i
//dalszy kod się nie wykona
throw new Exception("Nie można kupić ujemnej liczby ziemniaków");
}
//...
}
public static int Main()
{
Console.WriteLine("Ile ziemniaków chcesz kupić?");
int ilosc = int.Parse(Console.ReadLine());
try
{
KupZiemniaki(ilosc);
}
catch(Exception ex)
{
Console.WriteLine("Wystąpił błąd przy kupowaniu ziemniaków!");
}
return 0;
}
}