Dzisiejsze zajęcia będą wyjątkowe… Akademia C# 8 Dzisiejsze zajęcia będą wyjątkowe…
Wyjątkowo … obsługa wyjątków Akademia C# 8 Wyjątkowo … obsługa wyjątków
Nie lubimy wyjątków, ale …
Tak naprawdę to one nam pomagają: Określić lokalizację błędu w naszym programie Poprzez określenie typu wyjąku łatwiej domyślić się co jest źle Bo wiesz jaki rodzaj błędu wystąpił (np. NullReferenceException) Wyjątki pomagają ci określić sytuacje, w których twój kod zachowuje się w sposób niespodziewany
Wszystkie wyjątki dziedziczą po klasie Exception
Try-catch W momencie napotkaniu problemu w bloku try, instrukcje zostają przerwane i wykonywany jest kod z catch (o ile ten blok istnieje i czy typ odpowiada wyjątkowi).
Try-catch-finally Instrukcje z finally wykonają się zawsze!
Najpopularniejsze wyjątki ArithmeticException ArrayTypeMismatchException DivideByZeroException IndexOutOfRangeException InvalidCastException NullReferenceException OutOfMemoryException OverflowException StackOverflowException TypeInitializationException
DivideByZeroException Przykład int a = 0, b = 0; int wynik ; try { a = 5; b = 0; wynik = a / b; Console.WriteLine(wynik); } catch (DivideByZeroException ex) Console.WriteLine(ex.message);
FormatException Przykład Np. gdy próbujesz konwertować tekst (np. „abc”) na liczbę. int a; try { Console.WriteLine("Podaj a"); // podajemy na konsoli „abc” a = int.Parse(Console.ReadLine()); } catch (FormatException ex) Console.WriteLine("nie podałeś liczby");
InvalidCastException object o2 = new object(); try { int i2 = (int)o2; // Error } catch (InvalidCastException e) Nieoczekiwany typ danych. Klient przekazał do metody dane niewłaściwego typu. Np. gdy własny typ próbujesz sobie rzutować na int.
NullReferenceException object o2 = null; try { int i2 = (int)o2; // Error } catch (NullReferenceException e) Console.WriteLine("ojj wyjątek");
IndexOutOfRangeException int GetInt(int[] array, int index) { try return array[index]; } catch (System.IndexOutOfRangeException e) throw new System.ArgumentOutOfRangeException( "Parameter index is out of range.");
OverflowException byte liczba = 125; int x = liczba * 3; byte l = Convert.ToByte(x); Console.WriteLine(liczba);
Dobre rady: Unikaj przechwytywania wyjątku Exception. Używaj bardziej szczegółowych Wyjątków, które precyzyjniej opisują twoje nieprawidłowości.
Instrukcja throw; Zgłaszanie wyjątku za pomocą throw; throw new NullReferenceException(message);
Możesz tworzyć własne wyjątki public class Exception1 : Exception { public Exception1(string message) : base(message){} } public class SomeException : Exception1 { public SomeException(string message) : base(message){} }
Zadanie Stwórz obiekt kalkulator (obsługiwane działania + oraz -), który zabroni dzielenia przez zero oraz wykryje przepełnienie wartości. Sprawdź jakie maksymalne wartości można zapisać w poszczególnych typach liczbowych języka C#. Aplikacja ma działać w pętli umożliwiając wiele razy obliczenie sumy oraz różnicy.