Freigeben über


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:

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

C#-Programmierhandbuch

Übersicht über Ausnahmen

Referenz

C#-Schlüsselwörter

throw (C#-Referenz)

try-catch (C#-Referenz)

try-finally (C#-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.