Ausnahmenhierarchie
Aktualisiert: November 2007
Es gibt zwei Arten von Ausnahmen: die einen werden von einem ausgeführten Programm, die anderen von der CLR (Common Language Runtime) generiert. Darüber hinaus bilden beide Arten von Ausnahmen Hierarchien.
Die Exception-Klasse ist die Basisklasse für Ausnahmen. Verschiedene Ausnahmeklassen erben direkt von Exception, einschließlich ApplicationException und SystemException. Diese beiden Klassen bilden die Grundlage für fast alle Laufzeitausnahmen.
Die meisten von der Exception-Klasse abgeleiteten Ausnahmen fügen dieser Klasse keine weiteren Funktionen hinzu. Die Hierarchie der InvalidCastException-Klasse sieht beispielsweise so aus:
Object Exception SystemException InvalidCastException
Treten Fehler auf, löst die CLR entsprechende, von der SystemException-Klasse abgeleitete Ausnahmen aus. Diese Fehler werden durch fehlgeschlagene Laufzeitüberprüfungen verursacht (z. B. das Verlassen des gültigen Bereichs eines Arrays) und können bei der Ausführung einer Methode auftreten. Wenn Sie eine Anwendung entwerfen, die neue Ausnahmen erstellt, sollten Sie diese Ausnahmen von der Exception-Klasse ableiten. Weder ist es empfehlenswert, eine SystemException abzufangen, noch ist es guter Programmierstil, eine SystemException in der Anwendung auszulösen.
Zu den schwersten Ausnahmen, die von der CLR oder in einem nicht wiederherstellbaren Zustand ausgelöst werden, gehören ExecutionEngineException, StackOverflowException und OutOfMemoryException.
Interoperabilitätsausnahmen werden von SystemException abgeleitet und durch ExternalException erweitert. Zum Beispiel wird COMException während COM-Interop-Operationen ausgelöst und von ExternalException abgeleitet. Auch Win32Exception und SEHException werden von ExternalException abgeleitet.
Hierarchie der Laufzeitausnahmen
Die CLR verfügt über eine Basismenge von Ausnahmen, die von der SystemException-Klasse abgeleitet sind und bei Ausführung von Einzelanweisungen auslöst werden. Die folgende Tabelle beschreibt in hierarchischer Reihenfolge die Standardausnahmen der CLR und die Bedingungen, unter denen eine abgeleitete Klasse erstellt werden sollte.
Ausnahmetyp |
Basistyp |
Beschreibung |
Beispiel |
---|---|---|---|
Object |
Basisklasse für alle Ausnahmen. |
Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme). |
|
Exception |
Basisklasse für alle von der Runtime generierten Fehler. |
Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme). |
|
SystemException |
Wird von der Runtime nur dann ausgelöst, wenn ein Array falsch indiziert wurde. |
Indizieren eines Arrays außerhalb seines gültigen Wertebereichs: arr[arr.Length+1] |
|
SystemException |
Wird von der Runtime nur dann ausgelöst, wenn auf ein Null-Objekt verwiesen wurde. |
object o = null; o.ToString(); |
|
Wird von der Runtime nur dann ausgelöst, wenn auf ungültigen Speicher zugegriffen wird. |
Wird bei der Interoperation mit nicht verwaltetem Code oder unsicherem verwaltetem Code und der Verwendung eines ungültigen Zeigers ausgelöst. |
||
SystemException |
Wird von Methoden ausgelöst, wenn ein ungültiger Status vorliegt. |
Aufrufen von Enumerator.GetNext() nach Entfernen eines Item aus der zugrunde liegenden Auflistung. |
|
SystemException |
Basisklasse für alle Argumentausnahmen. |
Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme). |
|
ArgumentException |
Wird von Methoden ausgelöst, bei denen ein Argument nicht Null sein darf. |
String s = null; "Calculate".IndexOf (s); |
|
ArgumentException |
Wird von Methoden ausgelöst, die überprüfen, ob Argumente innerhalb eines gegebenen Bereichs liegen. |
String s = "string"; s.Chars[9]; |
|
SystemException |
Basisklasse für Ausnahmen, die in Umgebungen außerhalb der CLR auftreten oder adressiert werden. |
Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme). |
|
ExternalException |
Ausnahme, die Informationen über COM-HRESULT kapselt. |
Wird in COM-Interop verwendet. |
|
ExternalException |
Ausnahme, die Informationen über Win32-SEH (Structured Exception Handling) kapselt. |
Wird in nicht verwaltetem Code-Interop verwendet. |
Siehe auch
Konzepte
Exception-Klasse und Exception-Eigenschaften
Empfohlene Vorgehensweise für die Ausnahmebehandlung