Freigeben über


Exception-Klasse

Stellt Fehler dar, die beim Ausführen einer Anwendung auftreten.

Eine Liste aller Member dieses Typs finden Sie unter Exception-Member.

System.Object
   System.Exception
      Abgeleitete Klassen

<Serializable>
<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class Exception   Implements ISerializable
[C#]
[Serializable]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Exception : ISerializable
[C++]
[Serializable]
[ClassInterface(ClassInterfaceType::AutoDual)]
public __gc class Exception : public ISerializable
[JScript]
public
   Serializable
 ClassInterface(ClassInterfaceType.AutoDual)
class Exception implements ISerializable

Threadsicherheit

Alle öffentlichen statischen Member (Shared in Visual Basic) dieses Typs sind für Multithreadvorgänge sicher. Es wird nicht garantiert, dass alle Instanzenmember threadsicher sind.

Hinweise

Diese Klasse ist die Basisklasse für alle Ausnahmen. Wenn ein Fehler auftritt, wird dieser entweder vom System oder von der aktuell ausgeführten Anwendung durch Auslösen einer Ausnahme angezeigt, die Informationen über den Fehler enthält. Eine ausgelöste Ausnahme wird von der Anwendung oder vom Standardausnahmehandler behandelt.

Die Common Language Runtime stellt ein Modell zur Ausnahmebehandlung bereit, das auf der Darstellung von Ereignissen als Objekt und auf der Trennung von Programmcode und Code zur Ausnahmebehandlung in try-Blöcke bzw. in catch-Blöcke beruht. Es kann mehrere catch-Blöcke geben, von denen jeder zur Behandlung eines speziellen Ausnahmetyps bestimmt ist oder von denen ein Block zur Behandlung von genauer definierten Ausnahmen bestimmt ist.

Wenn in einer Anwendung Ausnahmen behandelt werden sollen, die beim Ausführen eines Anwendungscodeblocks auftreten, muss sich dieser Code innerhalb einer try-Anweisung befinden. Anwendungscode in einer try-Anweisung ist ein try-Block. Anwendungscode, der in einem try-Block ausgelöste Ausnahmen behandelt, wird in einer catch-Anweisung platziert und als catch-Block bezeichnet. Einem try-Block sind 0 oder mehr catch-Blöcke zugeordnet. Jeder catch-Block enthält einen Typfilter, der die Typen der von ihm behandelten Ausnahmen festlegt.

Wenn in einem try-Block eine Ausnahme ausgelöst wird, durchsucht das System die zugeordneten catch-Blöcke in der Reihenfolge, in der sie im Anwendungscode auftreten, bis ein catch-Block gefunden wird, der die Ausnahme behandelt. Ein catch-Block behandelt Ausnahmen vom Typ T, wenn der Typfilter des catch-Blocks T oder einen Typ angibt, von dem T abgeleitet ist. Wenn der erste catch-Block gefunden wird, der die Ausnahme behandelt, beendet das System die Suche. Aus diesem Grunde muss ein catch-Block, der einen Typ behandelt, im Anwendungscode vor einem catch-Block stehen, der seine Basistypen behandelt. Dies wird im Beispiel am Ende dieses Abschnitts veranschaulicht. Ein catch-Block, der System.Exception behandelt, wird zuletzt angegeben.

Wenn keiner der dem aktuellen try-Block zugeordneten catch-Blöcke die Ausnahme behandelt und der aktuelle try-Block beim aktuellen Aufruf in anderen try-Blöcken geschachtelt ist, werden die catch-Blöcke durchsucht, die dem nächsten umschließenden try-Block zugeordnet sind. Wenn kein catch-Block für die Ausnahme gefunden wird, durchsucht das System höhere Schachtelungsebenen im aktuellen Aufruf. Wenn für die Ausnahme im aktuellen Aufruf kein catch-Block gefunden wird, wird die Ausnahme gemäß der Aufrufliste weitergegeben, und der vorige Stapelrahmen wird nach einem catch-Block durchsucht, der die Ausnahme behandelt. Das Durchsuchen der Aufrufliste wird fortgesetzt, bis die Ausnahme behandelt wird oder in der Aufrufliste kein Stapelrahmen mehr vorhanden ist. Wenn der Anfang der Aufrufliste erreicht ist, ohne einen catch-Block für die Behandlung der Ausnahme zu finden, wird der Standardausnahmehandler aufgerufen, und die Anwendung wird beendet.

Die Ausnahmetypen unterstützen die folgenden Features:

  • Fehlerbeschreibungen im Klartext. Beim Auftreten einer Ausnahme stellt die Common Language Runtime eine Textmeldung bereit, die den Benutzer über die Art des Fehlers informiert und Wege zur Lösung des Problems vorschlägt. Diese Textmeldung befindet sich in der Message-Eigenschaft des Ausnahmeobjekts. Beim Erstellen des Ausnahmeobjekts kann eine Zeichenfolge an den Konstruktor übergeben werden, in der die Einzelheiten dieser bestimmten Ausnahme beschrieben werden. Wenn kein Argument für die Fehlermeldung übergeben wird, wird die Standardfehlermeldung verwendet.
  • Der Zustand der Aufrufliste beim Auslösen der Ausnahme. Die StackTrace-Eigenschaft enthält eine Stapelüberwachung, mit der die Stelle im Code bestimmt werden kann, an der der Fehler auftritt. Die Stapelüberwachung führt alle aufgerufenen Methoden und die Zeilennummern der Quelldatei auf, in der die Aufrufe stattfinden.

Für die Basisklasse Exception gibt es zwei Ausnahmekategorien:

  • Die vordefinierten von SystemException abgeleiteten Ausnahmeklassen der Common Language Runtime.
  • Die benutzerdefinierten von ApplicationException abgeleiteten Ausnahmeklassen der Anwendung.

Exception besitzt eine Anzahl von Eigenschaften, mit der Codeposition, Typ, Hilfedatei und Ursache für eine Ausnahme ermittelt werden können: StackTrace, InnerException, Message, HelpLink, HResult, Source und TargetSite.

Wenn zwischen zwei oder mehr Ausnahmen eine kausale Beziehung besteht, wird dies durch die InnerException-Eigenschaft wiedergegeben. Die äußere Ausnahme wird als Reaktion auf diese innere Ausnahme ausgelöst. Der Code, der die äußere Ausnahme behandelt, kann den Fehler anhand der Informationen über die innere Ausnahme auf geeignetere Weise behandeln.

Die Fehlermeldungszeichenfolge, die dem Konstruktor beim Erstellen des Ausnahmeobjekt übergeben wird, sollte lokalisiert werden und kann einer Ressourcendatei über den ResourceManager entnommen werden. Weitere Informationen über lokalisierte Ressourcen finden Sie in der System.Resources-Namespaceübersicht und unter Packen und Bereitstellen von .NET Framework-Anwendungen.

Die HelpLink-Eigenschaft kann einen URL (oder URN) für eine Hilfedatei enthalten, um dem Benutzer ausführliche Informationen über die Ursache der Ausnahme zur Verfügung zu stellen.

Exception verwendet HRESULT COR_E_EXCEPTION mit dem Wert 0x80131500.

Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von Exception finden Sie unter Exception-Konstruktoren.

Beispiel

[Visual Basic, C#, C++] Das folgende Codebeispiel veranschaulicht einen catch-Block, der zur Behandlung von ArithmeticException-Fehlern definiert wird. Dieser catch-Block fängt auch DivideByZeroException-Fehler ab, da DivideByZeroException von ArithmeticException abgeleitet ist und kein explizit für DivideByZeroException-Fehler definierter catch-Block vorhanden ist.

 
Imports System

Class ExceptionTestClass
   
   Public Shared Sub Main()
      Dim x As Integer = 0
      Try
         Dim y As Integer = 100 / x
      Catch e As ArithmeticException
         Console.WriteLine("ArithmeticException Handler: {0}", e.ToString())
      Catch e As Exception
         Console.WriteLine("Generic Exception Handler: {0}", e.ToString())
      End Try
   End Sub 'Main
End Class 'ExceptionTestClass

[C#] 
using System;

class ExceptionTestClass 
{
public static void Main() 
{
   int x = 0;
      try 
      {
         int y = 100/x;
      }
         catch (ArithmeticException e) 
         {
         Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
         }
            catch (Exception e) 
            {
            Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
            }
      }    
}

[C++] 
#using <mscorlib.dll>

using namespace System;

int main() {
   int x = 0;
   try {
      int y = 100/x;
   } catch (ArithmeticException* e) {
      Console::WriteLine(S"ArithmeticException Handler: {0}", e);
   } catch (Exception* e) {
      Console::WriteLine(S"Generic Exception Handler: {0}", e);
   }
}

[Visual Basic, C#, C++] Dieser C#-Code erzeugt die folgende Ausgabe:

[Visual Basic, C#, C++] ArithmeticException Handler:

System.DivideByZeroException: Attempted to divide by zero. at

ExceptionTestClass.Main()

[Visual Basic, C#, C++] Der Visual Basic-Code erzeugt die folgende Ausgabe:

[Visual Basic, C#, C++] ArithmeticException Handler:

System.OverflowException: Exception of type System.OverflowException was thrown.

at ExceptionTestClass.Main()

[JScript] Für JScript ist kein Beispiel verfügbar. Klicken Sie zum Anzeigen eines Beispiels für Visual Basic, C# oder C++ in der linken oberen Ecke der Seite auf die Schaltfläche "Sprachfilter" Sprachfilter.

Anforderungen

Namespace: System

Plattformen: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003-Familie, .NET Compact Framework - Windows CE .NET

Assembly: Mscorlib (in der Datei Mscorlib.dll)

Siehe auch

Exception-Member | System-Namespace | Behandeln und Auslösen von Ausnahmen | Verpacken und Weitergeben von Ressourcen | SystemException | ApplicationException