@Who-T: Danke !!
auf sowas habe ich nicht gedacht - jetzt ist mir der sinn natürlich klar. (ist wieder eins von den dingen, die einem im nachhinein betrachtet dann voll logisch vorkommen).
Hab noch ein kleines Beispielprogramm geschreiben - der Vollständigkeit halber:
Code:
//
// Funktion 1 erzeugt eine Exception, die nicht abgefangen wird
// in diesem Fall wird dann der Code bei Finally durchgeführt und
// die Funktion beendet.
//
// Grund: Es kann sein, dass man nicht alle auftretenden Excetions
// in der Funktion bearbeiten kann !
//
// Die Exception sollte dann jedoch im Hauptprogramm (bzw. der
// aufrufenden Funktion abgefangen werden.
//
static public void funktion1()
{
try
{
MessageBox.Show("Try - Funktion 1");
// nach diesem throw (der in der Fu. nicht verarbeitet wird),
// wird sofort der "finally" Zweig (und nichts sonst)
// ausgeführt
throw new NullReferenceException();
}
catch(IOException ex)
{
MessageBox.Show("IO-Excpetion caught - Funktion 1");
}
finally
{
MessageBox.Show("Finally Block - Funktion 1");
}
MessageBox.Show("Ende der Funktion 1");
}
//
// In dieser Funktion wird die "Funktino 1" aufgerufen und
// die Exceptions, die in der Funktion nicht behandlet werden, behandelt
//
private void button1_Click(object sender, System.EventArgs e)
{
try
{
MessageBox.Show("Try der aufrufenden Funktion");
funktion1();
}
catch (NullReferenceException ex)
{
MessageBox.Show ("NullReferenceException caught - aufrufende Funktion");
}
// Hier werden ALLE Exceptions verarbeitet
catch (Exception ex)
{
MessageBox.Show("Exception caught - aufrufende Funktion");
}
finally
{
MessageBox.Show ("Finally - aufrufende Funktion");
}
MessageBox.Show ("Ende - aufrufende Funktion");
}
Ausgabe:
--------
Try der aufrufenden Funktion
Try - Funktion 1
Finally Block - Funktion 1
NullReferenceException caught - aufrufende Funktion
Finally - aufrufende Funktion
Ende - aufrufende Funktion
Danke an alle + schöne, erholsame Feiertage !
-hannes