異常是程序運行中發生的錯誤,異常處理是程序設計的一部分。在c#中異常處理是通過Exception基類進行的,可以創建自己的異常類,但這個類必須是繼承自Exception基類。
異常將導致不完善或者不需要的結果,因此在程序設計中需要處理異常。異常也可以是象"IndexOutOfBounds"這樣的錯誤,這個錯誤表示程序試圖訪問數組中部存在的元素;比如數組最大元素為100,當試圖訪問元素101時就將會發生這樣的錯誤。但這些都是內建的異常,可以直接通過Exception基類處理,如果發生的異常不是內建的,那麼就需要我們自己見一個異常處理類,當然這個類時繼承自Exception基類。
下面的程序定義了一個自己的異常類:
using System; public class MyException:Exception { public string s; public MyException():base() { s=null; } public MyException(string message):base() { s=message.ToString(); } public MyException(string message,Exception myNew):base(message,myNew) { s=message.ToString();// Stores new exception message into class member s } public static void Test() { string str,stringmessage; bool flag=false; stringmessage=null; char ch=' '; int i=0; Console.Write("Please enter some string (less than 27 characters) - "); str=Console.ReadLine(); try{ ch=str[i]; while (flag==false) { if (ch=='\r') { flag=true; } else{ ch=str[i]; i++; } } } catch(Exception e){ flag=true; } if (i>27) { stringmessage="你的輸入不能超過27個字 !"; throw new MyException(stringmessage); } } public static void Main() { try { Test(); } catch(MyException e) { Console.WriteLine(e.s); } } }
上面的代碼建立了一個新的繼承於Exception基類的異常類叫MyException,這個類有三個過載構造函數,采用三個構造函數的目的十分簡單:為了能夠過載基類的構造函數。基類中缺省的和已經實現的構造函數必須在繼承類中實現,但是我們設計這個類的真正目的是:當用戶輸入超過27 個字就顯示一段錯誤提示信息,提醒用戶輸入不能超過27個字。雖然這更像是數據驗證而不是一個真正的異常但卻是一個比較好的例子,新的異常MyException被函數Test()拋出,通過該方法信息"你的輸入不能超過27個字"被main()的catch塊獲得。