C#-例外処理

例外は、プログラムの実行中に発生する問題です。AC#例外は、ゼロ除算の試行など、プログラムの実行中に発生する例外的な状況への応答です。

例外は、プログラムのある部分から別の部分に制御を移す方法を提供します。C#例外処理は、次の4つのキーワードに基づいて構築されています。trycatchfinally、および throw

  • try− tryブロックは、特定の例外がアクティブ化されるコードのブロックを識別します。その後に1つ以上のキャッチブロックが続きます。

  • catch−プログラムは、問題を処理したいプログラム内の場所で例外ハンドラーを使用して例外をキャッチします。catchキーワードは、例外のキャッチを示します。

  • finally−finallyブロックは、例外がスローされるかどうかに関係なく、特定のステートメントのセットを実行するために使用されます。たとえば、ファイルを開く場合、例外が発生するかどうかに関係なく、ファイルを閉じる必要があります。

  • throw−問題が発生すると、プログラムは例外をスローします。これは、throwキーワードを使用して行われます。

構文

ブロックで例外が発生したとすると、メソッドはtryキーワードとcatchキーワードの組み合わせを使用して例外をキャッチします。例外を生成する可能性のあるコードの周囲にtry / catchブロックが配置されます。try / catchブロック内のコードは保護されたコードと呼ばれ、try / catchを使用するための構文は次のようになります。

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
}

tryブロックでさまざまな状況で複数の例外が発生した場合に備えて、複数のcatchステートメントをリストしてさまざまなタイプの例外をキャッチできます。

C#の例外クラス

C#の例外は、クラスで表されます。C#の例外クラスは、主に直接的または間接的にSystem.Exceptionクラス。System.Exceptionクラスから派生した例外クラスのいくつかはSystem.ApplicationException そして System.SystemException クラス。

ザ・ System.ApplicationExceptionクラスは、アプリケーションプログラムによって生成された例外をサポートします。したがって、プログラマーによって定義された例外は、このクラスから派生する必要があります。

ザ・ System.SystemException classは、事前定義されたすべてのシステム例外の基本クラスです。

次の表に、Sytem.SystemExceptionクラスから派生した事前定義された例外クラスの一部を示します。

シニア番号 例外クラスと説明
1

System.IO.IOException

I / Oエラーを処理します。

2

System.IndexOutOfRangeException

メソッドが範囲外の配列インデックスを参照するときに生成されるエラーを処理します。

3

System.ArrayTypeMismatchException

タイプが配列タイプと一致しない場合に生成されるエラーを処理します。

4

System.NullReferenceException

nullオブジェクトの参照から生成されたエラーを処理します。

5

System.DivideByZeroException

被除数をゼロで除算することによって生成されるエラーを処理します。

6

System.InvalidCastException

型キャスト中に生成されたエラーを処理します。

7

System.OutOfMemoryException

空きメモリ不足から発生するエラーを処理します。

8

System.StackOverflowException

スタックオーバーフローから生成されたエラーを処理します。

例外の処理

C#は、tryブロックとcatchブロックの形式で、例外処理に対する構造化されたソリューションを提供します。これらのブロックを使用して、コアプログラムステートメントはエラー処理ステートメントから分離されます。

これらのエラー処理ブロックは、 trycatch、および 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

ユーザー定義の例外の作成

独自の例外を定義することもできます。ユーザー定義の例外クラスは、Exceptionクラス。次の例はこれを示しています-

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: 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);
      }
   }
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

TempIsZeroException: Zero Temperature found

オブジェクトを投げる

オブジェクトが直接または間接的に派生している場合は、オブジェクトをスローできます。 System.Exceptionクラス。catchブロックでthrowステートメントを使用して、現在のオブジェクトを-としてスローできます。

Catch(Exception e) {
   ...
   Throw e
}