【c#教程】C# 異常處理

來源:互聯網
上載者:User

C# 異常處理

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

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

try:一個 try 塊標識了一個將被啟用的特定的異常的代碼塊。後跟一個或多個 catch 塊。

catch:程式通過例外處理常式捕獲異常。catch 關鍵字表示異常的捕獲。

finally:finally 塊用於執行給定的語句,不管異常是否被拋出都會執行。例如,如果您開啟一個檔案,不管是否出現異常檔案都要被關閉。

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

文法

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

try{   // 引起異常的語句}catch( ExceptionName e1 ){   // 錯誤處理代碼}catch( ExceptionName e2 ){   // 錯誤處理代碼}catch( ExceptionName eN ){   // 錯誤處理代碼}finally{   // 要執行的語句}

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

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 處理當依從一個Null 物件時產生的錯誤。

System.DivideByZeroException 處理當除以零時產生的錯誤。

System.InvalidCastException 處理在類型轉換期間產生的錯誤。

System.OutOfMemoryException 處理空閑記憶體不足產生的錯誤。

System.StackOverflowException 處理棧溢出產生的錯誤。

異常處理

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

這些錯誤處理塊是使用 try、catch 和 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

建立使用者自訂異常

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

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

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

TempIsZeroException: Zero Temperature found

拋出對象

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

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

以上就是【c#教程】C# 異常處理的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.