C#中級コース-例外処理

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

catch:プログラムは、例外ハンドラーを介して例外をキャッチします。catchキーワードは、例外のキャッチを表します。

final:finallyブロックは、例外がスローされるかどうかに関係なく、指定されたステートメントを実行するために使用されます。たとえば、ファイルを開くと、異常の有無に関係なく閉じられます。

throw:問題が発生すると、プログラムは例外をスローします。throwキーワードを使用して完了します。

文法

ブロック内で例外が発生すると想定して、メソッドはtryおよびcatchキーワードを使用して例外をキャッチします。try / catchブロック内のコードは保護されたコードであり、try / catch構文を使用すると次のようになります。

try
{ //例外を発生させたステートメント} catch(例外タイプe1){ //エラー処理コード}





最後に
{ //実行されるステートメント}

//キャッチの例外タイプが発生すると、エラーコードが実行されます

C#の例外クラス

C#の例外は、クラスを使用して表現されます。C#の例外クラスは、主にSystem.Exceptionクラスから直接または間接的に派生します。System.ApplicationExceptionクラスとSystem.SystemExceptionクラスは、System.Exceptionクラスから派生した例外クラスです。

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

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

次の表に、Sytem.SystemExceptionクラスから派生したいくつかの事前定義された例外クラスを示します。
ここに画像の説明を挿入

例:

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. 

Result: 0

カスタム例外(例外のスロー:スロー)

ユーザー定義の例外クラスは、ApplicationExceptionクラスから派生します。次の例はこれを示しています。

using System;
namespace UserDefinedException
{
    
    
//继承自ApplicationException,自定义异常类
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);
      }
}

//测试类
     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();
      }
   }
}

解釈:
1。温度0という名前の異常なクラスを定義します。
2.温度クラスとshowTempメソッドを定義します。温度= 0の場合、出力する例外情報を例外クラスにスローします。つまり、「ZeroTemperaturefound 」を出力します(文字列タイプのパラメーターを渡します)。3。
クラスをテストします。インスタンス化温度クラスの場合、温度クラスでshowTempメソッドを呼び出します。温度は温度クラスで0として定義されているため、例外が発生します。キャッチの例外クラスがキャプチャされ、前にスローされた情報が出力されます。

予防

カスタムクラス、1。投擲をキャッチできる場合のみ、2。キャッチクラスは投擲クラスと一致している必要があります

おすすめ

転載: blog.csdn.net/euphorias/article/details/105709604