轉載->C#異常處理

來源:互聯網
上載者:User

標籤:val   static   fine   執行   另一個   catch   throw   問題   代碼塊   

C# 異常處理

異常是在程式執行期間出現的問題。C# 中的異常是對程式運行時出現的特殊情況的一種響應,比如嘗試除以零。

異常提供了一種把程式控制權從某個部分轉移到另一個部分的方式。C# 異常處理時建立在四個關鍵詞之上的:trycatchfinally 和 throw

  • try:一個 try 塊標識了一個將被啟用的特定的異常的代碼塊。後跟一個或多個 catch 塊。
  • catch:程式通過例外處理常式捕獲異常。catch 關鍵字表示異常的捕獲。
  • finally:finally 塊用於執行給定的語句,不管異常是否被拋出都會執行。例如,如果您開啟一個檔案,不管是否出現異常檔案都要被關閉。
  • throw:當問題出現時,程式拋出一個異常。使用 throw 關鍵字來完成。
文法

假設一個塊將出現異常,一個方法使用 try 和 catch 關鍵字捕獲異常。try/catch 塊內的代碼為受保護的代碼

使用 try/catch 文法如下所示:

 1 try 2 { 3    // 引起異常的語句 4 } 5 catch( ExceptionName e1 ) 6 { 7    // 錯誤處理代碼 8 } 9 catch( ExceptionName e2 )10 {11    // 錯誤處理代碼12 }13 catch( ExceptionName eN )14 {15    // 錯誤處理代碼16 }17 finally18 {19    // 要執行的語句20 }

您可以列出多個 catch 語句捕獲不同類型的異常,以防 try 塊在不同的情況下產生多個異常。

C# 中的異常類

C# 異常是使用類來表示的。C# 中的異常類主要是直接或間接地派生於 System.Exception類。System.ApplicationException 和 System.SystemException 類是派生於 System.Exception 類的異常類。

System.ApplicationException 類支援由應用程式產生的異常。所以程式員定義的異常都應派生自該類。

System.SystemException 類是所有預定義的系統異常的基類。

下表列出了一些派生自 Sytem.SystemException 類的預定義的異常類:

下表列出了一些派生自 Sytem.SystemException 類的預定義的異常類:

異常類 描述
System.IO.IOException 處理 I/O 錯誤。
System.IndexOutOfRangeException 處理當方法指向超出範圍的數組索引時產生的錯誤。
System.ArrayTypeMismatchException 處理當數群組類型不匹配時產生的錯誤。
System.NullReferenceException 處理當依從一個Null 物件時產生的錯誤。
System.DivideByZeroException 處理當除以零時產生的錯誤。
System.InvalidCastException 處理在類型轉換期間產生的錯誤。
System.OutOfMemoryException 處理空閑記憶體不足產生的錯誤。
System.StackOverflowException 處理棧溢出產生的錯誤。
異常處理

C# 以 try 和 catch 塊的形式提供了一種結構化的異常處理方案。使用這些塊,把核心程式語句與錯誤處理語句分離開。

這些錯誤處理塊是使用 trycatch 和 finally 關鍵字實現的。下面是一個當除以零時拋出異常的執行個體:

 1 using System; 2 namespace ErrorHandlingApplication 3 { 4     class DivNumbers 5     { 6         int result; 7         DivNumbers() 8         { 9             result = 0;10         }11         public void division(int num1, int num2)12         {13             try14             {15                 result = num1 / num2;16             }17             catch (DivideByZeroException e)18             {19                 Console.WriteLine("Exception caught: {0}", e);20             }21             finally22             {23                 Console.WriteLine("Result: {0}", result);24             }25 26         }27         static void Main(string[] args)28         {29             DivNumbers d = new DivNumbers();30             d.division(25, 0);31             Console.ReadKey();32         }33     }34 }

當上面的代碼被編譯和執行時,它會產生下列結果:

1 Exception caught: System.DivideByZeroException: Attempted to divide by zero. 2 at ...3 Result: 0
建立使用者自訂異常

您也可以定義自己的異常。使用者自訂的異常類是派生自 ApplicationException 類。下面的執行個體示範了這點:

 1 using System; 2 namespace UserDefinedException 3 { 4    class TestTemperature 5    { 6       static void Main(string[] args) 7       { 8          Temperature temp = new Temperature(); 9          try10          {11             temp.showTemp();12          }13          catch(TempIsZeroException e)14          {15             Console.WriteLine("TempIsZeroException: {0}", e.Message);16          }17          Console.ReadKey();18       }19    }20 }21 public class TempIsZeroException: ApplicationException22 {23    public TempIsZeroException(string message): base(message)24    {25    }26 }27 public class Temperature28 {29    int temperature = 0;30    public void showTemp()31    {32       if(temperature == 0)33       {34          throw (new TempIsZeroException("Zero Temperature found"));35       }36       else37       {38          Console.WriteLine("Temperature: {0}", temperature);39       }40    }41 }

當上面的代碼被編譯和執行時,它會產生下列結果:

TempIsZeroException: Zero Temperature found
拋出對象

如果異常是直接或間接派生自 System.Exception 類,您可以拋出一個對象。您可以在 catch 塊中使用 throw 語句來拋出當前的對象,如下所示:

1 Catch(Exception e)2 {3    ...4    Throw e5 }

 

本文轉自:菜鳥教程http://www.runoob.com/csharp/csharp-exception-handling.html

轉載->C#異常處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.