Krótko o podstawach wyjątków (exceptions) w c#
W samym .NETcie istnieje bardzo dużo zdefiniowancyh już wyjątków, które możemy użyć w naszej aplikacji. Dziś skupimy się wyłącznie na podstawowych informacjach. Każdy wyjątek dziedziczy po klasie Exception. Jest to klasa nadrzędna dla exceptionów. Schodząc niżej o jeden poziom następuje podział na: ApplicationException oraz SystemException.SystemException - po tej klasie dziedziczą wszystkie systemowe (dotnetowe) wyjątki takie jak nasz "ulubiony" NullPointerException. Można w skrócie powiedzieć, iż są to wyjątki dla niskopoziomowych części systemu.
ApplicationException - dziedziczą po niej wyjątki rzucane w wysokopoziomowych częściach aplikacji. Jeśli piszemy jakąś aplikację to dobrze jest aby nasze customowe wyjątki właśnie po niej dziedziczyły. Np. przypuścmy wystąpiła w naszej aplikacji jakaś sytuacja wyjątkowa, wtedy rzucamy naszym własnym wyjątkiem np. CustomException, dziedziczącym po ApplicationException.
Cała moc exeptionów właśnie w hierarchii w ich łapaniu. Dawno temu kiedy jeszcze nie było wyjątków reagowanie na wyjątkowe sytuacje odbywało się przez zwracanie odpowiedniego kodu błędu. Można było się w tym pogubić.
Zobaczmy prosty przykład użycia:
class NameException : ApplicationException {}
//----
// jakieś linie kodu
// i dochodzi do sytuacji wyjątkowej
//----
try{
if (string.IsNullOrEmpty(name)) {
throw new NameException();
}
}catch(NameException ex) {
// tutaj przejdzie sterowanie
}
catch(ApplicationException ex){
// tutaj nie przejdzie
}
catch(Exception ex) {
// tutaj tez nie przejdzie
}
Jeślibyśmy rzucili zamiast NameException jakimś innym dziedziczącym po ApplicationException to by wpadło do drugiego catcha. Natomiast wyrzucony wyjątek dziedziczyłby zaraz po klasie Exception to by wpadł do 3 catcha. Dlatego bardzo ważna jest hieriarchia aby odpowiednio móc przechwytywać i reagować na wyjątki.
Brak komentarzy:
Prześlij komentarz