1. 程式人生 > >C#異常處理機理-程式碼分析

C#異常處理機理-程式碼分析

//程式碼核心:

//1.通過屬性Age訪問私有欄位_age
//2.設計異常處理(溢位,非數字字串,年齡範圍異常,其它異常)
//3.自己定義一個異常類,繼承FormatException異常類

using System;

public class OutString
{
    private int _age; //1.定義一個私有欄位,限制類外面訪問
    public int Age    //2.定義一個公有屬性,對私有欄位進行訪問並提供靈活控制        
    {
    get       //3.取值訪問器
    {
       return this._age;
    }
    set      //4.賦值訪問器

    {
       if(value<=0 || value>=150)    //5.使用屬性提供的賦值訪問器進行控制,set{}就是個方法
            {
               //6.丟擲異常例項
               throw new AgeRangeException("年齡應該在0-150歲之間,請核對輸入資料!");              
            }
            else
            {
          this._age=value;
            }
    }
    }
   
   public class AgeRangeException:System.FormatException //7.定義一個異常類,繼承系統
FormatException異常類
    {
    public AgeRangeException():base()
    {}
    public AgeRangeException(string exmessage):base(exmessage)
    {}
    }
}

public class Demo //7.使用上面的class OutString,類做好了就是給別人用的哦
{
public static void Main(string[] args)    //8.程式的入口,靜態Main();
{
   string CP;
   while(true)    //9.死迴圈 除非自己能合理控制否則小心使用它

   {
    try    //10.try語句塊,也是雷區
      {
      int tempage;    
      OutString OS=new OutString();
      Console.Write("請輸入你的年齡:");
      tempage=Convert.ToInt32(Console.ReadLine());
      OS.Age=tempage;
      Console.WriteLine("年齡為:"+OS.Age);
         }
         //11.異常類層次關係Object--SystemException--SystemFormatException...
         catch(FormatException FE) //根據系統FormatException異常類捕捉異常情況
         {
          Console.WriteLine(FE.Message);
         }        
         catch(OverflowException OFE) //根據系統OverflowException異常類捕捉異常情況
         {
          Console.WriteLine(OFE.Message);
         }
         catch(Exception E) //根據系統Exception異常類捕捉異常情況
         {
          Console.WriteLine(E.Message);
          Console.WriteLine("發生異常了,請與管理員聯絡處理!!!");                   
         }
        
         finally   //12.finally語句塊總有執行的
         {
         Console.Write("按Y鍵退出,否則重新輸入");                          
         }        
         CP=Console.ReadLine().ToLower(); //.最後一點,控制死迴圈語句  
         if(CP=="y")
         {
         break;
         }
        
     }
}
}
Try...Catch...Finally   語句專門用於結構化異常處理。  
   
異常處理程式的try{}塊包含希望錯誤處理程式監視的程式碼節。如果該程式碼節中的任何程式碼在執行期間發生錯誤,C#將檢查Try...Catch...Finally內的每個Catch語句,直到找到條件與該錯誤匹配的語句。
如果找到了這樣的語句,則控制轉移到catch塊內的第一個程式碼行。
如果沒有找到匹配的Catch語句,則繼續搜尋包含發生異常的塊的外部Try...Catch...Finally塊的Catch語句。此過程在整個堆疊中繼續,直到在當前過程中找到匹配的 catch塊。
如果沒有找到,將產生錯誤。  
   
Finally節中的程式碼總是最後執行,並且剛好在錯誤處理塊失去範圍之前執行,不論Catch塊內的程式碼是否已執行。將清理程式碼(如用於關閉檔案和釋放物件的程式碼)放在Finally節中。

(以上理解如有誤,懇請指教!並將立即更新)