【Unity|C#】基礎篇(15)——異常處理(try/catch/throw)


【學習資料】

  《C#圖解教程》(第22章)https://www.cnblogs.com/moonache/p/7687551.html
  電子書下載:https://pan.baidu.com/s/1mhOmBG0

 


 【筆記】

try 一個 try 塊標識了一個將被激活的特定的異常的代碼塊。后跟一個或多個 catch 塊。
catch

程序通過異常處理程序捕獲異常。catch 關鍵字表示異常的捕獲。

如果catch不寫(except)具體捕獲哪個異常,則表示捕獲所有的異常。

finally

finally 塊用於執行給定的語句,不管異常是否被拋出都會執行

例如,如果您打開一個文件,不管是否出現異常文件都要被關閉。

throw 當問題出現時,程序拋出一個異常。使用 throw 關鍵字來完成。

 

  • C#中內置的異常類型
    • C# 中的異常類主要是直接或間接地派生於 System.Exception 類。System.ApplicationException System.SystemException 類是派生於 System.Exception 類的異常類。
    • System.ApplicationException :支持由應用程序生成的異常。所以程序員定義的異常都應派生自該類。
    • System.SystemException        :是所有預定義的系統異常的基類。
    • 下表列出了一些派生自 Sytem.SystemException 類的預定義的異常類:

  • 舉個例子
    • int result = 0;
      int num1 = 25;
      int num2 = 0;
      try
      {
          result = num1 / num2;
      }
      catch (DivideByZeroException e) // 捕獲除以0的異常
      {
          Debug.Log(string.Format("Exception caught: {0}", e));
      }
      finally // 不管是否異常,都會執行
      {
          Debug.Log(string.Format("Result: {0}", result));
      }
      
      // 輸出結果
      // Exception caught: System.DivideByZeroException: Attempted to divide by zero.
      //  at ......
      // Result: 0

 

  • 用戶自定義異常類型
    • 用戶自定義的異常類是派生自 ApplicationException
    • // 自定義異常
      public class TempIsZeroException : ApplicationException
      {
          public TempIsZeroException(string message) : base(message)
          {
          }
      }
      namespace UserDefinedException
      {
          class TestTemperature
          {
              public static void ShowTemp(int temperature)
              {
                  if (temperature == 0)
                  {
                      // 拋出自定義異常 TempIsZeroException
                      throw (new TempIsZeroException("Zero Temperature found"));
                  }
              }
              static void Main(string[] args)
              {
                  try
                  {
                      ShowTemp(0);
                  }
                  catch (TempIsZeroException e) // 捕獲自定義異常
                  {
                      Console.WriteLine("TempIsZeroException: {0}", e.Message);
                  }
                  Console.ReadKey();
              }
          }
      }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM