Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

Ähnliche Präsentationen


Präsentation zum Thema: "Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)"—  Präsentation transkript:

1 Exception-Handling

2 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!) Benutzerverhalten Fehleingaben Systemverhalten Selten vorkommende reguläre Abläufe sind nicht als Ausnahmen zu behandeln Szenarien Über Selektion behandelbar Beispiel Dateiende erreicht Eingabevalidierungen Prinzip: Trennung Nutzcode Fehlerbehandlungscode

3 18.05.20143 18.05.2014 3 Früher – Behandlung über Returncodes Rückmeldung der fehlerbehafteten Methode an Aufrufer Boolsche Werte, -1, … Nachteile Aufrufer behandelt Ausnahmen mitten im Standardablauf Eigentlicher Algorithmus wird überlagert Bei vielen Exceptions schwer lesbarer Code Aufrufer kann Ausnahme (Rückgabewert) ignorieren Vogel Strauss-Taktik Exceptions transportieren Fehler samt Informationen direkt von der Stelle des Auftretens zur Behandlungsstelle zurück

4 18.05.20144 18.05.2014 4 Verarbeitung von Ausnahmefällen In der.NET Class Library werden in vielen Fällen Exceptions ausgelöst. Beispiele: - Umwandeln von String abc in Zahl (Convert.ToInt32) - Versuch eine Datei zu öffnen die nicht existiert - Division durch 0 Um ein Programmende verhindern zu können, müssen diese Ausnahmefälle behandelt werden. (Natürlich können auch eigene Exceptions ausgelöst werden… dazu später mehr)

5 18.05.20145 18.05.2014 5 Was tun, wenn Exception auftritt? Ausnahmesituation bereinigen und Vorgang wiederholen CD/DVD einlegen Neue Benutzereingabe Exception mitloggen und weiter machen Weniger kritische Situationen (Warnings) Exception abfangen und durch eigene Exception (Wrapper) ersetzen Sicherheitsgünde (Infos unterdrücken) An Benutzer angepasste Informationen Exception mit Inner-Exception weiterleiten Benutzer über Ausnahme informieren und Programm beenden

6 18.05.20146 18.05.2014 6 Exceptions in C# try…catch…finally

7 18.05.20147 Einfache Exceptionbehandlung Szenario: Konto darf um maximal 1000 überzogen werden Zuweisung von -2000 auf Saldo löst Exception aus 18.05.2014 7

8 18.05.20148 18.05.2014 8 Try – catch - finally

9 18.05.20149 18.05.2014 9 Eigene Exceptions erzeugen Normalerweise ApplicationException als Basisklasse Properties sind als Zusatzinfo neben Message möglich

10 18.05.201410 18.05.2014 10 Exception-Hierarchie (1) Alle C#-Ausnahmen leiten sich aus der Klasse Exception ab. Wenn eine Ausnahme auftritt, wird der geeignete catch-Block durch einen Abgleich zwischen Typ der Ausnahme und der angegebenen Exception im catch-Block ermittelt. Ein catch-Block mit exakter Übereinstimmung hat hierbei Vorrang vor einer allgemeineren Ausnahme.

11 18.05.201411 18.05.2014 11 Exception-Hierarchie (1) class Test { static int Zero = 0; public static void Main() { try { int j = 22 / Zero; } // Spezifische Ausnahme auffangen catch (DivideByZeroException e) { Console.WriteLine("DivideByZero {0}", e); } // Verbleibende Ausnahmen auffangen catch (Exception e) { Console.WriteLine("Exception {0}", e); } Der catch-Block, mit dem die DivideByZeroException aufgefangen wird, stellt die genauere Übereinstimmung dar, daher wird dieser Codeabschnitt ausgeführt.

12 18.05.201412 18.05.2014 12 Exception-Hierarchie (2) Wird eine Exception innerhalb einer Methode nicht abgefangen, wird die Exception an die aufrufende Methode weitergereicht. Wenn eine Exception auch in der obersten Ebene (Main Methode) nicht abgefangen wird, so wird das Programm beendet!

13 18.05.201413 18.05.2014 13 Exception-Hierarchie (2) Bei Ausführung der Division wird eine Exception erzeugt. Die Laufzeitumgebung sucht nach einem try-Block in AFunction(), findet jedoch keinen try-Block, daher springt sie aus AFunction() und sucht in Main() nach einem try-Block. Hier ist ein try-Block vorhanden, also wird nach einem entsprechenden catch-Block gesucht. Anschließend wird der catch- Block ausgeführt. class Test { static int Zero = 0; static void AFunction() { int j = 22 / Zero; // Die folgende Zeile wird nie ausgef ü hrt. Console.WriteLine("In AFunction()"); } public static void Main() { try { AFunction(); } catch (DivideByZeroException e) { Console.WriteLine("DivideByZero {0}", e); }

14 18.05.201414 18.05.2014 14 Inner-Exceptions erzeugen Erzeugen über speziellen Konstruktor Property kann zusätzliche Info liefern Amount soll abgehoben werden Exception auffangen und mit eigenen Infos weitergeben

15 18.05.201415 18.05.2014 15 Inner-Exceptions auswerten Verarbeiten der Liste von Exceptions

16 18.05.201416 Ergebnis 18.05.2014 16

17 18.05.201417 18.05.2014 17 Übersicht der Exception-Klassenhierarchie MSDN

18 18.05.201418 18.05.2014 18 Properties zum Informationsaustausch

19 18.05.201419 18.05.2014 19 Zwei Zentrale Exceptionhandler

20


Herunterladen ppt "Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)"

Ähnliche Präsentationen


Google-Anzeigen