C#-Ausnahmebehandlung
Ausnahmen sind Probleme, die während der Programmausführung auftreten. Eine Ausnahme in C# ist eine Reaktion auf eine besondere Situation, die während der Ausführung des Programms auftritt, beispielsweise der Versuch, durch Null zu dividieren.
Ausnahmen bieten eine Möglichkeit, die Kontrolle über ein Programm von einem Teil auf einen anderen zu übertragen. Die C#-Ausnahmebehandlung basiert auf vier Schlüsselwörtern: try, Catch, Finally und Throw.
try: Ein try-Block identifiziert einen Codeblock, der eine bestimmte Ausnahme auslöst. Gefolgt von einem oder mehreren Catch-Blöcken.
catch: Das Programm fängt Ausnahmen durch Ausnahmehandler ab. Das Schlüsselwort „catch“ gibt das Abfangen von Ausnahmen an.
finally: Der final-Block wird verwendet, um eine bestimmte Anweisung auszuführen, unabhängig davon, ob eine Ausnahme ausgelöst wird. Wenn Sie beispielsweise eine Datei öffnen, wird die Datei geschlossen, unabhängig davon, ob eine Ausnahme auftritt.
throw: Wenn ein Problem auftritt, löst das Programm eine Ausnahme aus. Verwenden Sie dazu das Schlüsselwort throw.
Syntax
Angenommen, ein Block löst eine Ausnahme und eine Methode zum Abfangen der Ausnahme mithilfe von Try- und Catch-Schlüsselwörtern aus. Der Code im Try/Catch-Block ist geschützter Code. Verwenden Sie die Try/Catch-Syntax wie folgt:
try { // 引起异常的语句 } catch( ExceptionName e1 ) { // 错误处理代码 } catch( ExceptionName e2 ) { // 错误处理代码 } catch( ExceptionName eN ) { // 错误处理代码 } finally { // 要执行的语句 }
Sie können mehrere Catch-Anweisungen auflisten, um verschiedene Arten von Ausnahmen zu erfassen, falls der Try/Catch-Block mehrere Ausnahmen enthält unter verschiedenen Umständen erzeugt.
Ausnahmeklassen in C#
C#-Ausnahmen werden durch Klassen dargestellt. Die Ausnahmeklassen in C# werden hauptsächlich direkt oder indirekt von der System.Exception-Klasse abgeleitet. Die Klassen System.ApplicationException und System.SystemException sind Ausnahmeklassen, die von der Klasse System.Exception abgeleitet sind.
Die System.ApplicationException-Klasse unterstützt von Anwendungen generierte Ausnahmen. Daher sollten alle vom Programmierer definierten Ausnahmen von dieser Klasse abgeleitet werden.
Die Klasse System.SystemException ist die Basisklasse für alle vordefinierten Systemausnahmen.
Die folgende Tabelle listet einige vordefinierte Ausnahmeklassen auf, die von der Sytem.SystemException-Klasse abgeleitet sind:
Ausnahmeklasse
Beschreibung
System.IO.IOException Behandelt E/A-Fehler.
System.IndexOutOfRangeException Behandelt den Fehler, der generiert wird, wenn eine Methode auf einen Array-Index zeigt, der außerhalb des gültigen Bereichs liegt.
System.ArrayTypeMismatchException Behandelt Fehler, die generiert werden, wenn Array-Typen nicht übereinstimmen.
System.NullReferenceException Behandelt Fehler, die generiert werden, wenn auf ein Nullobjekt zurückgegriffen wird.
System.DivideByZeroException Behandelt Fehler, die beim Teilen durch Null entstehen.
System.InvalidCastException Behandelt Fehler, die während der Typkonvertierung generiert werden.
System.OutOfMemoryException Behandelt Fehler, die durch unzureichenden freien Speicher generiert werden.
System.StackOverflowException Behandelt Fehler, die durch einen Stapelüberlauf generiert werden.
Ausnahmebehandlung
C# bietet eine strukturierte Ausnahmebehandlungslösung in Form von Try- und Catch-Blöcken. Verwenden Sie diese Blöcke, um Kernprogrammanweisungen von Fehlerbehandlungsanweisungen zu trennen.
Diese Fehlerbehandlungsblöcke werden mithilfe der Schlüsselwörter „try“, „catch“ und „finally“ implementiert. Hier ist ein Beispiel für eine Ausnahme, die beim Teilen durch Null ausgelöst wird:
using System; namespace ErrorHandlingApplication { class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) { Console.WriteLine("Exception caught: {0}", e); } finally { Console.WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } }
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
Benutzerdefiniert erstellen Ausnahmen
Sie können auch eigene Ausnahmen definieren. Benutzerdefinierte Ausnahmeklassen werden von der ApplicationException-Klasse abgeleitet. Das folgende Beispiel zeigt dies:
using System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } } public class TempIsZeroException: ApplicationException { public TempIsZeroException(string message): base(message) { } } public class Temperature { int temperature = 0; public void showTemp() { if(temperature == 0) { throw (new TempIsZeroException("Zero Temperature found")); } else { Console.WriteLine("Temperature: {0}", temperature); } } }
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:
TempIsZeroException: Zero Temperature found
Wirft das Objekt
Das können Sie Wirft ein Objekt aus, wenn die Ausnahme direkt oder indirekt von der System.Exception-Klasse abgeleitet ist. Sie können das aktuelle Objekt mit einer throw-Anweisung innerhalb eines Catch-Blocks wie folgt werfen:
Catch(Exception e) { ... Throw e }
以上就是【c#教程】C# 异常处理的内容,更多相关内容请关注PHP中文网(www.php.cn)!