Ausnahmen und Ausnahmebehandlung (C#-Programmierhandbuch)
Aktualisiert: Juli 2008
Die Features zur Ausnahmebehandlung in C# helfen Ihnen, wenn bei der Ausführung eines Programms unerwartete oder außergewöhnliche Situationen auftreten. Bei der Ausnahmebehandlung wird mithilfe der Schlüsselwörter try, catch und finally versucht, Aktionen auszuführen, die möglicherweise fehlschlagen, um Fehler zu behandeln und anschließend die Ressourcen zu bereinigen. Ausnahmen können von der Common Language Runtime (CLR), durch .NET Framework oder Bibliotheken von Drittanbietern oder durch den Anwendungscode generiert werden. Ausnahmen werden mit dem throw-Schlüsselwort erstellt.
In vielen Fällen wird eine Ausnahme nicht von einer Methode ausgelöst, die direkt durch den Code aufgerufen wurde, sondern von einer anderen Methode, die sich weiter unten in der Aufrufliste befindet. In diesem Fall entlädt die CLR die Aufrufliste, sucht eine Methode mit einem catch-Block für den spezifischen Ausnahmetyp und führt den ersten catch-Block aus, der gefunden wird. Falls kein entsprechender catch-Block in der Aufrufliste gefunden wird, wird der Prozess beendet und eine Meldung für den Benutzer angezeigt.
In diesem Beispiel testet eine Methode auf eine Division durch 0 und fängt den Fehler ab. Ohne diese Ausnahmebehandlung würde das Programm mit der Fehlermeldung DivideByZeroException wurde nicht behandelt beendet werden.
class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new System.DivideByZeroException();
return x / y;
}
static void Main()
{
// Input for test purposes. Change values
// to see exception handling behavior.
double a = 98, b = 0;
double result = 0;
try
{
result = SafeDivision(a, b);
Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
}
catch (DivideByZeroException e)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Übersicht über Ausnahmen
Ausnahmen verfügen über folgende Eigenschaften:
Ausnahmen sind Typen, die letztlich alle von System.Exception abgeleitet werden.
Verwenden Sie einen try-Block um Anweisungen, die möglicherweise Ausnahmen generieren.
Sobald eine Ausnahme im try-Block auftritt, springt die Ablaufsteuerung zum ersten vorhandenen und verknüpften Ausnahmehandler, sofern in der Aufrufliste vorhanden. In C# werden Ausnahmehandler mit dem catch-Schlüsselwort definiert.
Wenn für eine bestimmte Ausnahme kein Ausnahmehandler vorhanden ist, wird die Ausführung des Programms mit einer Fehlermeldung angehalten.
Fangen Sie keine Ausnahme ab, es sei denn, Sie können sie bearbeiten, und belassen Sie die Anwendung in einem bekannten Zustand. Wenn Sie System.Exception abfangen, lösen Sie es erneut mit dem catch-Schlüsselwort am Ende des throw-Blocks aus.
Wenn ein catch-Block eine Ausnahmevariable definiert, können Sie damit mehr Informationen über den Typ der Ausnahme erhalten.
Ausnahmen können mithilfe des throw-Schlüsselworts explizit von einem Programm generiert werden.
Ausnahmeobjekte enthalten ausführliche Informationen zum Fehler, z. B. den Zustand der Aufrufliste und eine Textbeschreibung des Fehlers.
Code in einem finally-Block wird ausgeführt, auch wenn eine Ausnahme ausgelöst wird. Verwenden Sie einen finally-Block, um Ressourcen freizugeben, z. B. zum Schließen von im try-Block geöffneten Streams oder Dateien.
Verwaltete Ausnahmen in .NET Framework werden zusätzlich zum Win32-Mechanismus für die strukturierte Ausnahmebehandlung implementiert. Weitere Informationen finden Sie unter Structured Exception Handling (C++) und A Crash Course on the Depths of Win32 Structured Exception Handling
Verwandte Abschnitte
Weitere Informationen über Ausnahmen und Ausnahmebehandlung finden Sie in den folgenden Themen:
Erstellen und Auslösen von Ausnahmen (C#-Programmierhandbuch)
Gewusst wie: Behandeln einer Ausnahme mit try/catch (C#-Programmierhandbuch)
Gewusst wie: Ausführen von Bereinigungscode mit finally (C#-Programmierhandbuch)
C#-Programmiersprachenspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:
8.9.5 Die throw-Anweisung
8.10 Die try-Anweisung
16 Ausnahmen
Siehe auch
Konzepte
Referenz
try-catch-finally (C#-Referenz)
Weitere Ressourcen
Entwurfsrichtlinien für Ausnahmen
Behandeln und Auslösen von Ausnahmen
Schreiben von zuverlässigem .NET-Code
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2008 |
Codebeispiel geändert und Text über die Entladung des Stapels hinzugefügt. |
Korrektur inhaltlicher Fehler. |
Juli 2008 |
Erläuterndes Beispiel zum finally-Block hinzugefügt. |
Informationsergänzung. |
Juli 2008 |
Informationen zum Win32-Mechanismus für die strukturierte Ausnahmebehandlung hinzugefügt. |
Informationsergänzung. |