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
- Exception-Klasse und Exception-Eigenschaften
- How to: Verwenden des Try-Catch-Blocks zum Abfangen von Ausnahmen
- How to: Verwenden spezifischer Ausnahmen in einem Catch-Block
- How to: Explizites Auslösen von Ausnahmen
- How to: Erstellen benutzerdefinierter Ausnahmen
- Verwenden benutzergefilterter Ausnahmehandler
- How to: Verwenden von Finally-Blöcken
- Behandeln von COM-Interop-Ausnahmen
- Bewährte Methoden für Ausnahmen
- What Every Dev needs to Know About Exceptions in the Runtime (Was jeder Entwickler über Ausnahmen in der Runtime wissen sollte)