C# - Ausnahmebehandlung
Eine Ausnahme ist ein Problem, das während der Ausführung eines Programms auftritt. Eine C#-Ausnahme ist eine Reaktion auf einen außergewöhnlichen Umstand, der auftritt, während ein Programm ausgeführt wird, z. B. der Versuch, durch Null zu dividieren.
Ausnahmen bieten eine Möglichkeit, die Kontrolle von einem Teil eines Programms auf einen anderen zu übertragen. Die C#-Ausnahmebehandlung basiert auf vier Schlüsselwörtern:try , fangen , endlich , und werfen .
-
versuchen − Ein try-Block identifiziert einen Codeblock, für den bestimmte Ausnahmen aktiviert sind. Darauf folgen ein oder mehrere catch-Blöcke.
-
fangen − Ein Programm fängt eine Ausnahme mit einem Ausnahmebehandler an der Stelle in einem Programm ab, an der Sie das Problem behandeln möchten. Das Schlüsselwort catch zeigt das Abfangen einer Ausnahme an.
-
endlich − Der finally-Block wird verwendet, um einen bestimmten Satz von Anweisungen auszuführen, unabhängig davon, ob eine Ausnahme ausgelöst wird oder nicht. Wenn Sie beispielsweise eine Datei öffnen, muss sie geschlossen werden, unabhängig davon, ob eine Ausnahme ausgelöst wird oder nicht.
-
werfen − Ein Programm wirft eine Ausnahme, wenn ein Problem auftritt. Dies geschieht mit einem Throw-Schlüsselwort.
Syntax
Angenommen, ein Block löst eine Ausnahme aus, fängt eine Methode eine Ausnahme mit einer Kombination aus den Schlüsselwörtern try und catch ab. Ein Try/Catch-Block wird um den Code platziert, der möglicherweise eine Ausnahme generiert. Code innerhalb eines try/catch-Blocks wird als geschützter Code bezeichnet, und die Syntax für die Verwendung von try/catch sieht wie folgt aus −
try { // statements causing exception } catch( ExceptionName e1 ) { // error handling code } catch( ExceptionName e2 ) { // error handling code } catch( ExceptionName eN ) { // error handling code } finally { // statements to be executed }
Sie können mehrere catch-Anweisungen auflisten, um verschiedene Arten von Ausnahmen abzufangen, falls Ihr try-Block in verschiedenen Situationen mehr als eine Ausnahme auslöst.
Ausnahmeklassen in C#
C#-Ausnahmen werden durch Klassen dargestellt. Die Ausnahmeklassen in C# werden hauptsächlich direkt oder indirekt von der System.Exception abgeleitet Klasse. Einige der von der System.Exception-Klasse abgeleiteten Ausnahmeklassen sind System.ApplicationException und System.SystemException Klassen.
Die System.ApplicationException -Klasse unterstützt Ausnahmen, die von Anwendungsprogrammen generiert werden. Daher sollten die von den Programmierern definierten Ausnahmen von dieser Klasse abgeleitet werden.
Die System.SystemException Klasse ist die Basisklasse für alle vordefinierten Systemausnahmen.
Die folgende Tabelle enthält einige der vordefinierten Ausnahmeklassen, die von der Sytem.SystemException-Klasse −
abgeleitet sindSr.No. | Ausnahmeklasse und -beschreibung |
---|---|
1 | System.IO.IOException Behandelt E/A-Fehler. |
2 | System.IndexOutOfRangeException Behandelt Fehler, die generiert werden, wenn eine Methode auf einen Array-Index außerhalb des zulässigen Bereichs verweist. |
3 | System.ArrayTypeMismatchException Behandelt Fehler, die generiert werden, wenn der Typ nicht mit dem Array-Typ übereinstimmt. |
4 | System.NullReferenceException Behandelt Fehler, die beim Verweisen auf ein Nullobjekt generiert werden. |
5 | System.DivideByZeroException Behandelt Fehler, die beim Teilen eines Dividenden durch Null entstehen. |
6 | System.InvalidCastException Behandelt Fehler, die während der Typumwandlung generiert werden. |
7 | System.OutOfMemoryException Behandelt Fehler, die durch unzureichenden freien Speicher generiert werden. |
8 | System.StackOverflowException Behandelt Fehler, die durch einen Stapelüberlauf generiert wurden. |
Behandlung von Ausnahmen
C# bietet eine strukturierte Lösung für die Ausnahmebehandlung in Form von Try-and-Catch-Blöcken. Mit diesen Blöcken werden die Anweisungen des Kernprogramms von den Anweisungen zur Fehlerbehandlung getrennt.
Diese Fehlerbehandlungsblöcke werden mithilfe von try implementiert , fangen , und endlich Schlüsselwörter. Das Folgende ist ein Beispiel für das Auslösen einer Ausnahme, wenn die Bedingung zum Teilen durch Null auftritt −
Live-Demousing 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 das folgende Ergebnis −
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
Benutzerdefinierte Ausnahmen erstellen
Sie können auch Ihre eigene Ausnahme definieren. Benutzerdefinierte Ausnahmeklassen werden von der Exception abgeleitet Klasse. Das folgende Beispiel demonstriert dies −
Live-Demousing 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: Exception { 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 das folgende Ergebnis −
TempIsZeroException: Zero Temperature found
Objekte werfen
Sie können ein Objekt auslösen, wenn es entweder direkt oder indirekt von der System.Exception abgeleitet ist Klasse. Sie können eine throw-Anweisung im catch-Block verwenden, um das aktuelle Objekt als −
zu werfenCatch(Exception e) { ... Throw e }
C Sprache
- C# verwenden
- C Dateiverwaltung
- Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
- Java-Ausnahmebehandlung
- C++-Ausnahmebehandlung:Try, Catch, Throw Beispiel
- Python-Ausnahmebehandlung:Try, Catch, Final &Raise [Beispiel]
- C++-Signalverarbeitung
- Java 9 - Modulsystem
- SPS vs. DCS
- Modulares Palettenhandhabungssystem ermöglicht flexible Produktion