Ausnahmenhierarchie

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 der Exception-Klasse keine weiteren Funktionen hinzu. Die Hierarchie der InvalidCastException-Klasse sieht beispielsweise so aus:

Object    Ausnahme       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 die COMException-Ausnahme während COM-Interop-Operationen ausgelöst und von ExternalException abgeleitet. Auch Win32Exception und SEHException sind 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

Ausnahme

Objekt

Basisklasse für alle Ausnahmen.

Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).

SystemException

Ausnahme

Basisklasse für alle von der Runtime generierten Fehler.

Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).

IndexOutOfRangeException

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]

NullReferenceException

SystemException

Wird von der Runtime nur dann ausgelöst, wenn auf ein Null-Objekt verwiesen wurde.

object o = null;

o.ToString();

AccessViolationException

SystemException

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.

InvalidOperationException

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.

ArgumentException

SystemException

Basisklasse für alle Argumentausnahmen.

Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).

ArgumentNullException

ArgumentException

Wird von Methoden ausgelöst, bei denen ein Argument nicht Null sein darf.

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

Wird von Methoden ausgelöst, die überprüfen, ob Argumente innerhalb eines gegebenen Bereichs liegen.

String s = "string";

s.Chars[9];

ExternalException

SystemException

Basisklasse für Ausnahmen, die in Umgebungen außerhalb der CLR auftreten oder adressiert werden.

Keines (verwenden Sie eine abgeleitete Klasse dieser Ausnahme).

ComException

ExternalException

Ausnahme, die Informationen über COM-HRESULT kapselt.

Wird in COM-Interop verwendet.

SEHException

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

Weitere Ressourcen

Grundlagen der Ausnahmebehandlung

Behandeln und Auslösen von Ausnahmen