Entwickler-Ecke
Basistechnologien - Exception Handler - Verständnisfrage
Ritzeratze - Do 29.05.14 09:29
Titel: Exception Handler - Verständnisfrage
Moin,
ich habe eine Verständnisfrage:
Wenn in einem try-Block mehrere Exception Handler definiert sind, wie (in welcher Reihenfolge) werden diese Execption Handler abgearbeitet?
Prinzipiell werden Exceptions doch dort abgearbeitet wo sie auftreten.
Gruss
Ritze
jaenicke - Do 29.05.14 09:53
Es wird der erste passende benutzt, sprich speziellere Exceptionklassen müssen immer vor ihren Vorfahren stehen, der Compiler prüft das. Siehe Doku:
http://msdn.microsoft.com/de-de/library/0yd65esw.aspx hat folgendes geschrieben: |
It is possible to use more than one specific catch clause in the same try-catch statement. In this case, the order of the catch clauses is important because the catch clauses are examined in order. Catch the more specific exceptions before the less specific ones. The compiler produces an error if you order your catch blocks so that a later block can never be reached. |
Das gilt für Delphi z.B. genauso, wird dort aber nicht vom Compiler abgefangen.
Ralf Jansen - Do 29.05.14 14:56
Zitat: |
Wenn in einem try-Block mehrere Exception Handler definiert sind, wie (in welcher Reihenfolge) werden diese Execption Handler abgearbeitet? |
Kurze Ergänzung. Es werden nie mehrere Handler abgearbeitet sondern immer nur einer benutzt! Und die Reihenfolge in der geprüft wird welcher verwendet wird ist einfach Top-Down. Man sollte die also immer nach Möglichkeit von der speziellsten zur allgemeinsten Exceptionklasse sortieren. Wenn du mehrer Exceptionhandler möchtest dann mußt du mehrerer try..catch Blöcke schachteln und die Exception per throw weiterwerfen.
jaenicke - Do 29.05.14 16:20
Ralf Jansen hat folgendes geschrieben : |
Man sollte die also immer nach Möglichkeit von der speziellsten zur allgemeinsten Exceptionklasse sortieren. |
Ich habe es nicht ausprobiert, aber laut Doku kann man das gar nicht anders machen, da der Compiler einen Fehler wirft, wenn man eine falsche Reihenfolge wählt. (So wie er es ja auch sonst bei nie erreichbarem Quelltext macht.) :gruebel:
Ralf Jansen - Do 29.05.14 20:15
Zitat: |
Ich habe es nicht ausprobiert, |
Ich jetzt aber. Ergebnis
Zitat: |
A previous catch clause already catches all exceptions of this or of a super type ('System.Exception') |
Die Doku hat offensichtlich recht ;)
Ritzeratze - Sa 31.05.14 09:54
MOin ,
Danke für die ganzen Antworten. Das war sehr informativ und hat mich weitergebracht.
Gruss Ritze
Ritzeratze - So 01.06.14 11:15
Moin, eine abschließende Frage,
Wenn ich eine "Top Down" Priorisierung vornehme und von dem speziellsten zum generalistischen Handler verarbeite, wo muss dann ein Exception Handler stehen der alle denkbaren Ausnahmen gleichzeitig behandelt? Muss ich diesen in der Main Methode implementieren?
Gruss Ritze
Ralf Jansen - So 01.06.14 15:56
Es gibt nicht den einen Ort wo man das tut. Ein Exceptionhandler gehört so nah oder fern von der eigentlichen problemauslösenden Stelle das man die sinnvoll verarbeiten kann und insbesondere sinnvoll entscheiden kann ob man hier abbricht oder das Programm weiterlaufen lässt. Wenn es einfach eine fixe Stelle gäbe würde es einem das Framework auch schon weitestgehend abnehmen.
Wenn du den Ort für eine letzte Verteidungslinie bevor das Programm abraucht suchst dann kommt es auf die Art des Programms an. Bei einer Konsolenanwendung ist es einfach die Main. Bei einer Winforms oder WPF Anwendung ist das zu spät da gibt es entsprechende Events in den Applivcation Klassen, bei Multithreadanwendungen muß man das je Thread berücksichtigen etc.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!