C#の例外処理
プログラム実行の問題の間に異常。 C#のプログラムは、ゼロ除算しようとする試みとして、実行時に発生する例外的な状況に応じて例外です。
例外はプログラム制御が提供される方法の別の部分にある部分から転送されます。 試して、キャッチ、最終的にとスロー:上記の4つのキーワードをもとに、C#の例外処理。
- 試して:tryブロックが活性化されるコードのブロックの特定の例外を識別します。一つ以上のcatchブロックが続きます。
- キャッチ:例外ハンドラを介して例外プログラムをキャッチします。キャッチキーワードは、異常なキャプチャを示しています。
- 最終的に:finallyブロックに関係なくスローされる例外を実行するかどうかの、特定の文を実行するために使用されます。ファイルを開く場合たとえば、関係なくかどうかの例外ファイルがクローズされる存在でなければなりません。
- スロー:問題が発生した場合、プログラムは例外をスローします。スローを完了するために、キーワードを使用します。
文法
ブロックが異常とし、キーワードを用いた方法は試してみて、例外をキャッチします。 次の構文に示すように、コードはcatchブロックは、使用のtry / catch、コードを保護されている/してみてください。
試します { 例外を発生させた} //ステートメント キャッチ(ExceptionName e1を) { //エラー処理コード} キャッチ(ExceptionName e2の) { //エラー処理コード} キャッチ(ExceptionName JA) { //エラー処理コード} 最終的に { //ステートメントを実行します}
あなたは、tryブロックは、異なる状況下で複数の例外を発生させる防ぐために、例外の種類をキャッチするために複数のcatchステートメントを一覧表示することができます。
C#の例外クラス
C#の例外は、クラス表現を使用することです。 C#の例外クラスは、主に直接的または間接的のSystem.Exceptionクラスから派生します。System.ApplicationExceptionとSystem.SystemExceptionクラスは例外クラスのSystem.Exceptionクラスを派生します。
アプリケーション例外によって生成されたSystem.ApplicationExceptionクラスのサポート。 だから、プログラマ定義例外はこのクラスから派生する必要があります。
System.SystemExceptionクラスは、例外のすべての定義済みシステムの基本クラスです。
次の表は、いくつかの事前定義されたSytem.SystemExceptionクラスの例外クラスから派生示しています。
异常类 | 描述 |
---|---|
System.IO.IOException | 处理 I/O 错误。 |
System.IndexOutOfRangeException | 处理当方法指向超出范围的数组索引时生成的错误。 |
System.ArrayTypeMismatchException | 处理当数组类型不匹配时生成的错误。 |
System.NullReferenceException | 处理当依从一个空对象时生成的错误。 |
System.DivideByZeroException | 处理当除以零时生成的错误。 |
System.InvalidCastException | 处理在类型转换期间生成的错误。 |
System.OutOfMemoryException | 处理空闲内存不足生成的错误。 |
System.StackOverflowException | 处理栈溢出生成的错误。 |
例外処理
C#がしようとすると、catchブロックは、構造化された例外処理プログラムの形態で提供されます。 これらのブロックを使用して、コアプログラム文とエラー処理文を分離しました。
これらのブロックをエラー処理は、試してキャッチし、最終的に達成するためにキーワードを使用することです。ここではゼロ例で割ったときにスローされる例外は次のとおりです。
システムを用いました。 名前空間のErrorHandlingApplication { クラスDivNumbers { int型の結果。 DivNumbers() { 結果= 0。 } 公共ボイド部門(int型NUM1、int型からnum2) { 試します { 結果= NUM1 / NUM2。 } キャッチ(DivideByZeroException電子) { Console.WriteLineを( "例外キャッチ:{0}"、電子); } 最終的に { Console.WriteLineを( "結果:{0}"、結果)。 } } 静的な無効メイン(文字列[] args) { DivNumbers)が(=新しいDivNumbersをdは、 d.division(25、0)。 Console.ReadKey()。 } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
例外がキャッチ:System.DivideByZeroExceptionをゼロで除算しようとしました。 で... 結果:0
ユーザ定義の例外を作成します。
また、独自の例外を定義することができます。 ユーザ定義の例外クラスは、ApplicationExceptionをクラスから派生します。 次の例では、この点を示しています。
システムを用いました。 名前空間のUserDefinedException { クラスTestTemperature { 静的な無効メイン(文字列[] args) { 温度TEMP =新しい温度(); 試します { temp.showTemp()。 } キャッチ(TempIsZeroException電子) { Console.WriteLineを( "TempIsZeroException:{0}"、e.Message)。 } Console.ReadKey()。 } } } パブリッククラスTempIsZeroException:ApplicationExceptionを { 公共TempIsZeroException(文字列メッセージ):ベース(メッセージ) { } } パブリッククラス温度 { int型温度= 0; 公共ボイドshowTemp() { (温度が== 0)の場合 { スロー(新しいTempIsZeroException(「見つかったゼロ温度 ")); } ほかに { Console.WriteLineを( "温度:{0}"、温度)。 } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
TempIsZeroException:ゼロ温度が見つかりました。
Throwableを
例外が直接的または間接的のSystem.Exceptionクラスから派生されている場合は、オブジェクトを投げることができます。 次のように現在のオブジェクトをスローするcatchブロックのthrowステートメントを使用することができます。
キャッチ(例外e) { ... 電子メールを投げます }