Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktualisiert: November 2007
Die Ausnahmebehandlung in C# unterscheidet sich kaum von der Ausnahmebehandlung in Java.
Wenn bei der Ausführung eines Programms ein kritischer Fehler auftritt, wird von der .NET Framework-Common Language Runtime (CLR) ein Exception-Objekt erstellt, anhand dessen der Fehler genau spezifiziert wird. In .NET Framework ist Exception die Basisklasse für alle Ausnahmeklassen. Es gibt zwei Kategorien von Ausnahmen, die sich von der Exception-Klasse ableiten: SystemException und ApplicationException. Alle Typen im System-Namespace leiten sich von SystemException ab. Benutzerdefinierte Ausnahmen leiten sich in der Regel von ApplicationException ab, damit zwischen Laufzeit- und Anwendungsfehlern unterschieden werden kann. Zu den gängigen System-Ausnahmen gehören:
IndexOutOfRangeException: Es wird ein Index verwendet, der die Größe des Arrays oder der Auflistung übersteigt.
NullReferenceException: Die Eigenschaft oder Methode eines Verweises wurde verwendet, bevor dieser Verweis auf eine gültige Instanz festgelegt wurde.
ArithmeticException: Eine Operation führt zu einem Überlauf oder Unterlauf.
FormatException: Ein Argument oder ein Operand hat ein falsches Format.
Wie in Java fügen Sie Code, der eine Ausnahme auslösen kann, in einen try -Block ein. Ein oder mehrere nachfolgende catch-Blöcke übernehmen die Fehlerbehandlung. Sie können auch einen finally-Block für Code verwenden, den Sie unabhängig von einer Ausnahme ausführen möchten. Weitere Informationen finden Sie unter try-catch (C#-Referenz) und try-catch-finally (C#-Referenz).
Wenn Sie mehrere catch-Blöcke verwenden, müssen die abgefangenen Ausnahmen ihrer Spezialität nach absteigend angeordnet werden, da nur der erste mit der ausgelösten Ausnahme übereinstimmende catch-Block ausgeführt wird. Der C#-Compiler setzt dies durch, der Java-Compiler nicht.
Außerdem ist in C# im Unterschied zu Java für den catch-Block kein Argument erforderlich. Wenn kein Argument angegeben ist, gilt der catch-Block für alle Exception-Klassen.
Wenn Sie z. B. eine Datei lesen, kann es zu einer FileNotFoundException oder einer IOException kommen. In diesem Fall fügen Sie den spezielleren FileNotFoundException-Handler als ersten ein:
try
{
// code to open and read a file
}
catch (System.IO.FileNotFoundException e)
{
// handle the file not found exception first
}
catch (System.IO.IOException e)
{
// handle any other IO exceptions second
}
catch
{
// a catch block without a parameter
// handle all other exceptions last
}
finally
{
// this is executed whether or not an exception occurs
// use to release any external resources
}
Sie können Ihre eigenen Ausnahmeklassen erstellen, indem Sie diese von Exception ableiten. So wird z. B. im folgenden Code eine InvalidDepartmentException-Klasse erstellt, die Sie auslösen können, wenn beispielsweise die angegebene Abteilung für einen neuen Employee ungültig ist. Der Klassenkonstruktor für die benutzerdefinierte Ausnahme ruft den Basisklassenkonstruktor mithilfe des base-Schlüsselworts auf und sendet eine entsprechende Meldung:
public class InvalidDepartmentException : System.Exception
{
public InvalidDepartmentException(string department) : base("Invalid Department: " + department)
{
}
}
Mit dem folgenden Code könnten Sie dann die Ausnahme auslösen:
class Employee
{
private string department;
public Employee(string department)
{
if (department == "Sales" || department == "Marketing")
{
this.department = department;
}
else
{
throw new InvalidDepartmentException(department);
}
}
}
C# unterstützt keine überprüften Ausnahmen. In Java werden die überprüften Ausnahmen mit dem throws-Schlüsselwort deklariert. So wird angegeben, dass eine Methode einen bestimmten Ausnahmetyp auslösen kann, der vom aufrufenden Code behandelt werden muss.
Siehe auch
Konzepte
Referenz
Ausnahmen und Ausnahmebehandlung (C#-Programmierhandbuch)