C# 例外処理
例外は、プログラムの実行中に発生する問題です。 C# の例外は、ゼロで除算しようとするなど、プログラムの実行中に発生する特殊な状況に対する応答です。
例外は、プログラムの制御をある部分から別の部分に移す方法を提供します。 C# の例外処理は、try、catch、finally、throw の 4 つのキーワードに基づいています。
try: try ブロックは、特定の例外をトリガーするコードのブロックを識別します。 1 つ以上の catch ブロックが続きます。
catch: プログラムは例外ハンドラーを通じて例外をキャッチします。 catch キーワードは例外のキャッチを示します。
finally:finally ブロックは、例外がスローされるかどうかに関係なく、指定されたステートメントを実行するために使用されます。たとえば、ファイルを開いた場合、例外が発生したかどうかに関係なく、ファイルは閉じられます。
throw: 問題が発生すると、プログラムは例外をスローします。これを実現するには、throw キーワードを使用します。
構文
ブロックが例外をスローし、メソッドが try および catch キーワードを使用して例外をキャッチすると仮定します。 try/catch ブロック内のコードは保護されたコードです。次のように try/catch 構文を使用します。
try { // 引起异常的语句 } catch( ExceptionName e1 ) { // 错误处理代码 } catch( ExceptionName e2 ) { // 错误处理代码 } catch( ExceptionName eN ) { // 错误处理代码 } finally { // 要执行的语句 }
さまざまな種類の例外をキャプチャする複数の catch ステートメントをリストして、try ブロックがさまざまな状況で複数の例外を生成するのを防ぐことができます。例外。
C# の例外クラス
C# 例外はクラスによって表されます。 C# の例外クラスは、主に System.Exception クラスから直接または間接的に派生します。 System.ApplicationException クラスと System.SystemException クラスは、System.Exception クラスから派生した例外クラスです。
System.ApplicationException クラスは、アプリケーションによって生成された例外をサポートします。したがって、プログラマが定義するすべての例外はこのクラスから派生する必要があります。
System.SystemException クラスは、すべての事前定義されたシステム例外の基本クラスです。
次の表に、Sytem.SystemException クラスから派生したいくつかの事前定義例外クラスを示します。
Exception クラス
説明
System.IO.IOException I/O エラーを処理します。
System.IndexOutOfRangeException メソッドが範囲外の配列インデックスを指している場合に生成されるエラーを処理します。
System.ArrayTypeMismatchException 配列の型が一致しない場合に生成されるエラーを処理します。
System.NullReferenceException null オブジェクトに依存するときに生成されるエラーを処理します。
System.DivideByZeroException ゼロ除算時に生成されたエラーを処理します。
System.InvalidCastException 型変換中に生成されたエラーを処理します。
System.OutOfMemoryException 空きメモリ不足によって生成されたエラーを処理します。
System.StackOverflowException スタック オーバーフローによって生成されたエラーを処理します。
例外処理
C# は、try ブロックと catch ブロックの形式で構造化された例外処理ソリューションを提供します。これらのブロックを使用して、コア プログラム ステートメントをエラー処理ステートメントから分離します。
これらのエラー処理ブロックは、try、catch、finally キーワードを使用して実装されます。ゼロで除算するときにスローされる例外の例を次に示します。
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(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
ユーザー定義の例外の作成
独自の例外を定義することもできます。ユーザー定義の例外クラスは、ApplicationException クラスから派生します。次の例は、これを示しています。
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); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
TempIsZeroException: Zero Temperature found
オブジェクトのスロー
例外が System.Exception クラスから直接または間接的に派生する場合、次の結果をスローできます。物体。次のように catch ブロック内で throw ステートメントを使用して現在のオブジェクトをスローできます:
Catch(Exception e) { ... Throw e }
以上就是【c#教程】C# 异常处理的内容,更多相关内容请关注PHP中文网(www.php.cn)!