中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostSharp AOP編程:4.PostSharp的OnExceptionAspect類基本組成

發布時間:2020-06-25 03:55:27 來源:網絡 閱讀:426 作者:程興亮 欄目:編程語言

        在PostSharp中得OnExceptionAspect類是針對異常的消息截取。繼承于它的特性將可以在發生異常的時候對方法體內的異常截取,并且做出動作,看是否停止本程序運行,還是忽略異常。

        這個類里面有兩個主要的函數可以重載分別是OnException(MethodExecutionArgs args)、GetExceptionType(System.Reflection.MethodBase targetMethod)。他們分別意義如下:

        OnException(MethodExecutionArgs args):當發生異常時截取異常發生的位置(在哪個命名空間?哪個類?哪個方法?)、異常類型、異常消息等信息,并且可以異常將如何處理。

        GetExceptionType(System.Reflection.MethodBase targetMethod):設置需要攔截的異常類型,比如設置需要攔截參數異常,那么其他的異常類型發生時將不會被此特性所攔截。

        首先我們編寫一個繼承于OnExceptionAspect類的特性,并且重載相關函數如下代碼:

 

  1. [Serializable
  2. public class ExceptionAttribute : OnExceptionAspect 
  3.     //當異常發生時 
  4.     public override void OnException(MethodExecutionArgs args) 
  5.     { 
  6.         Console.WriteLine("______________________________________________________________________________"); 
  7.         Console.WriteLine("異常時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); ; 
  8.         Console.WriteLine("異常類名:" + args.Method.DeclaringType.FullName); 
  9.         Console.WriteLine("異常方法:" + args.Method.Name); 
  10.         Console.WriteLine("異常信息:" + args.Exception.ToString()); 
  11.         args.FlowBehavior = FlowBehavior.Continue
  12.     } 
  13.  
  14.     //需要攔截的異常類型為ArgumentException 
  15.     public override Type GetExceptionType(System.Reflection.MethodBase targetMethod) 
  16.     { 
  17.         return typeof(ArgumentException); 
  18.     } 

        其次我們編寫一個目標類,此類中含有一個方法,方法內拋出參數異常,并為其添加Exception的特性,如以下代碼所示:

 

  1. class People 
  2.     [Exception] 
  3.     public void Test(int a, int b) 
  4.     { 
  5.         throw new ArgumentException("這里有參數錯誤,請檢查參數"); 
  6.     } 

        再編寫一個對比目標類,要實現同樣的效果需要遠遠多于我們使用PostSharp的情況,而且會讓我們的邏輯處理更為復雜和麻煩,如下代碼所示:

 

  1. class Pelple1 
  2.     public void Test(int a, int b) 
  3.     { 
  4.         try  
  5.         { 
  6.             throw new ArgumentException("這里有參數錯誤,請檢查參數"); 
  7.         } 
  8.         catch (ArgumentException args) 
  9.         { 
  10.             Console.WriteLine("______________________________________________________________________________"); 
  11.             Console.WriteLine("異常時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); ; 
  12.             Console.WriteLine("異常信息:" + args.ToString());         
  13.         } 
  14.     } 

        最后我們在客戶端初始化People類并且引用方法如下代碼:

 

  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         People p = new People(); 
  5.         p.Test(3,5); 
  6.  
  7.         Pelple1 p1 = new Pelple1(); 
  8.         p1.Test(3, 5); 
  9.         Console.ReadLine(); 
  10.     } 

        如需源碼請點擊 PostSharpOnExceptionAspect.zip  下載,運行效果如下圖:

PostSharp AOP編程:4.PostSharp的OnExceptionAspect類基本組成

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

那曲县| 汽车| 凉城县| 元谋县| 乌恰县| 额济纳旗| 安国市| 富裕县| 武定县| 石楼县| 壶关县| 平阴县| 玉溪市| 昌平区| 金寨县| 拉孜县| 南华县| 股票| 中牟县| 青神县| 博乐市| 宣化县| 辽宁省| 辰溪县| 秭归县| 阳江市| 秦安县| 康马县| 江孜县| 金昌市| 大同市| 高雄市| 正阳县| 奉节县| 全南县| 稷山县| 韶山市| 化隆| 龙门县| 贵溪市| 万州区|