讀了一位博友關于使用委托避免重復的try.catch的隨筆(原文地址:http://m.survivalescaperooms.com/foolishfox/archive/2010/07/30/1788416.html),有點感想,寫下來與大家分享.
補充一下原文的例子:
publicclassCatchExceptions{/// <summary>/// 捕獲異常的方法/// </summary>/// <param name="func">綁定到委托的方法</param>/// <returns>異常信息,如果為空則沒有產生異常</returns>publicstaticstringTryCatch(Action func){stringrunMsg = string.Empty;try{func();}catch(Exception ex){runMsg = ex.Message;}returnrunMsg;}/// <summary>/// 捕獲異常的方法/// </summary>/// <typeparam name="T">委托的參數類型</typeparam>/// <param name="func">綁定到委托的方法</param>/// <param name="param">委托的參數實例</param>/// <returns>異常信息,如果為空則沒有產生異常</returns>publicstaticstringTryCatch<T>(Action<T> func, T param){stringrunMsg = string.Empty;try{func(param);}catch(Exception ex){runMsg = ex.Message;}returnrunMsg;}/// <summary>/// 捕獲異常的方法/// </summary>/// <typeparam name="T1">委托的第一個參數類型</typeparam>/// <typeparam name="T2">委托的第二個參數類型</typeparam>/// <param name="func">綁定到委托的方法</param>/// <param name="param1">委托的第一個參數實例</param>/// <param name="param2">委托的第二個參數實例</param>/// <returns></returns>publicstaticstringTryCatch<T1, T2>(Action<T1, T2> func, T1 param1, T2 param2){stringrunMsg = string.Empty;try{func(param1, param2);}catch(Exception ex){runMsg = ex.Message;}returnrunMsg;}} |
原文使用的是Func而此處使用的是Action,到底Func和Action有什么區別呢?
Action委托 表示 封裝一個方法,該方法不具有參數并且不返回值
Action<T>委托 是Action的泛型委托 表示封裝一個方法,該方法擁有一個參數并且不返回值
Action<T>委托多參數的形式為 Action<T1,T2,T3.....> 且最多只能有16個參數
再來看看Func委托.
Func<TResult>委托 表示 封裝一個沒有參數但返回TResult類型的值的方法
Func<T,TResult>委托 表示 封裝一個有一個參數但返回TResult類型的值的方法
Func<T,TResult>的多參數形式為 Func<T1,T2,T3.....,TResult> 且最多只能有16個參數
所以上述TryCatch方法的參數到底用Action還是Func取決于實際的使用情況,如果需要綁定到委托的方法有返回值,使用Func,如果沒有返回值,則使用Action
方法定義好了,如果調用呢?
這里我們定義一個有參數的方法和一個無參的方法
PRivatevoidDeleteObj(intobjID){//主體省略...} |
|
privatevoidAddObj()學習交流
熱門圖片
猜你喜歡的新聞
新聞熱點 2019-10-23 09:17:05
2019-10-21 09:20:02
2019-10-21 09:00:12
2019-09-26 08:57:12
2019-09-25 08:46:36
2019-09-25 08:15:43
疑難解答 |