C#異常處理詳細(xì)剖析
學(xué)習(xí)C#語言時(shí),經(jīng)常會(huì)遇到C#異常問題,這里將介紹C#異常處理問題的解決方法。
異常是程序運(yùn)行中發(fā)生的錯(cuò)誤,C#異常處理是程序設(shè)計(jì)的一部分。在C#異常處理是通過Exception基類進(jìn)行的,可以創(chuàng)建自己的異常類,但這個(gè)類必須是繼承自Exception基類。
異常將導(dǎo)致不完善或者不需要的結(jié)果,因此在程序設(shè)計(jì)中需要處理異常。異常也可以是象"IndexOutOfBounds"這樣的錯(cuò)誤,這個(gè)錯(cuò)誤表示程序試圖訪問數(shù)組中部存在的元素;比如數(shù)組***元素為100,當(dāng)試圖訪問元素101時(shí)就將會(huì)發(fā)生這樣的錯(cuò)誤。但這些都是內(nèi)建的異常,可以直接通過 Exception基類處理,如果發(fā)生的異常不是內(nèi)建的,那么就需要我們自己見一個(gè)C#異常處理類,當(dāng)然這個(gè)類時(shí)繼承自Exception基類。
下面的程序定義了一個(gè)自己的異常類:
- 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個(gè)字 !";
- throw new MyException(stringmessage);
- }
- }
- public static void Main()
- {
- try
- {
- Test();
- }
- catch(MyException e)
- {
- Console.WriteLine(e.s);
- }
- }
- }
上面的代碼建立了一個(gè)新的繼承于Exception基類的異常類叫MyException,這個(gè)類有三個(gè)過載構(gòu)造函數(shù),采用三個(gè)構(gòu)造函數(shù)的目的十分簡(jiǎn)單:為了能夠過載基類的構(gòu)造函數(shù)。基類中缺省的和已經(jīng)實(shí)現(xiàn)的構(gòu)造函數(shù)必須在繼承類中實(shí)現(xiàn),但是我們?cè)O(shè)計(jì)這個(gè)類的真正目的是:當(dāng)用戶輸入超過27 個(gè)字就顯示一段錯(cuò)誤提示信息,提醒用戶輸入不能超過27個(gè)字。雖然這更像是數(shù)據(jù)驗(yàn)證而不是一個(gè)真正的異常但卻是一個(gè)比較好的例子,新的異常 MyException被函數(shù)Test()拋出,通過該方法信息"你的輸入不能超過27個(gè)字"被main()的catch塊獲得。
【編輯推薦】