Behandeln und Auslösen von Ausnahmen in .NET

Anwendungen müssen in der Lage sein, Fehler zu behandeln, die während der Ausführung konsistent auftreten. .NET bietet ein Modell, um Anwendungen auf einheitliche Weise über Fehler zu benachrichtigen: .NET-Vorgänge geben Fehler durch Auslösen von Ausnahmen an.

Ausnahmen

Bei einer Ausnahme handelt es sich um einen Fehlerzustand oder unerwartetes Verhalten beim Ausführen eines Programms. Ausnahmen können durch Fehler in Ihrem oder in aufgerufenem Code (z.B. bei freigegebenen Bibliotheken), nicht verfügbare Betriebssystemressourcen, unerwartete, von der Runtime festgestellte Fehlerzustände (z.B. durch nicht überprüfbaren Code) und andere Ereignisse ausgelöst werden. Anwendungen können in einigen, aber nicht allen Fällen wiederhergestellt werden. Obwohl bei den meisten Anwendungsausnahmen eine Wiederherstellung möglich ist, ist dies beim Großteil der Laufzeitausnahmen nicht der Fall.

In .NET ist eine Ausnahme ein Objekt, das von der System.Exception-Klasse erbt. Eine Ausnahme wird in einem Codebereich ausgelöst, in dem ein Fehler aufgetreten ist. Die Ausnahme bleibt solange im Stapel, bis sie durch die Anwendung behandelt oder das Programm beendet wird.

Ausnahmen vs. herkömmliche Fehlerbehandlungsmethoden

Herkömmliche Modelle der Fehlerbehandlung in Sprachen beruhten bisher entweder auf eigenen sprachenabhängigen Methoden der Fehlererkennung und -behandlung oder auf dem Fehlerbehandlungsmechanismus des Betriebssystems. Die Art und Weise, in der die Ausnahmebehandlung in .NET implementiert ist, bietet folgende Vorteile:

  • Das Auslösen und Behandeln von Ausnahmen funktioniert für alle .NET-Programmiersprachen gleich.

  • Eine besondere Sprachsyntax ist für die Ausnahmebehandlung nicht erforderlich, trotzdem kann jede Sprache ihre eigene Syntax definieren.

  • Ausnahmen können prozess- und sogar computerübergreifend ausgelöst werden.

  • Einer Anwendung kann Ausnahmebehandlungscode hinzugefügt werden, um die Programmzuverlässigkeit zu erhöhen.

Ausnahmen bieten verschiedene Vorteile gegenüber anderen Methoden zur Fehlerbenachrichtigung, z.B. Rückgabecodes. Fehler bleiben nicht unerkannt, da die Runtime Ihre Anwendung beendet, wenn eine Ausnahme ausgelöst wurde und nicht behandelt wird. Ungültige Werte werden nicht weiter im System weitergegeben – was passieren kann, wenn im Code nicht geprüft wird, ob ein Fehlerrückgabecode vorhanden ist.

Allgemeine Ausnahmen

In der folgenden Tabelle sind einige allgemeine Ausnahmen sowie Beispiele aufgeführt, die die Ausnahmen verursachen können.

Ausnahmetyp Beschreibung Beispiel
Exception Die Basisklasse für alle Ausnahmen. Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).
IndexOutOfRangeException Wird von der Runtime nur dann ausgelöst, wenn ein Array falsch indiziert ist. Indizieren eines Arrays außerhalb seines gültigen Vereichs:
arr[arr.Length+1]
NullReferenceException Wird von der Runtime nur dann ausgelöst, wenn auf ein NULL-Objekt verwiesen wird. object o = null;
o.ToString();
InvalidOperationException Wird von Methoden ausgelöst, wenn ein ungültiger Status vorliegt. Aufrufen von Enumerator.MoveNext() nach Entfernen eines Elements aus der zugrunde liegenden Auflistung.
ArgumentException Die Basisklasse für alle Argumentausnahmen. Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).
ArgumentNullException Wird von Methoden ausgelöst, bei denen ein Argument nicht gleich NULL sein darf. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Wird von Methoden ausgelöst, die überprüfen, ob Argumente in einem angegebenen Bereich liegen. String s = "string";
s.Substring(s.Length+1);

Siehe auch