讀了一位博友關于使用委托避免重復的try.catch的隨筆(原文地址:http://www.49028c.com/foolishfox/archive/2010/07/30/1788416.html),有點感想,寫下來與大家分享.
補充一下原文的例子:
public class CatchExceptions {
/// <summary>
/// 捕獲異常的方法
/// </summary>
/// <param name="func">綁定到委托的方法</param>
/// <returns>異常信息,如果為空則沒有產生異常</returns>
public static string TryCatch(Action func)
{
string runMsg = string .Empty;
try
{
func();
}
catch (Exception ex)
{
runMsg = ex.Message;
}
return runMsg;
}
/// <summary>
/// 捕獲異常的方法
/// </summary>
/// <typeparam name="T">委托的參數類型</typeparam>
/// <param name="func">綁定到委托的方法</param>
/// <param name="param">委托的參數實例</param>
/// <returns>異常信息,如果為空則沒有產生異常</returns>
public static string TryCatch<T>(Action<T> func, T param)
{
string runMsg = string .Empty;
try
{
func(param);
}
catch (Exception ex)
{
runMsg = ex.Message;
}
return runMsg;
}
/// <summary>
/// 捕獲異常的方法
/// </summary>
/// <typeparam name="T1">委托的第一個參數類型</typeparam>
/// <typeparam name="T2">委托的第二個參數類型</typeparam>
/// <param name="func">綁定到委托的方法</param>
/// <param name="param1">委托的第一個參數實例</param>
/// <param name="param2">委托的第二個參數實例</param>
/// <returns></returns>
public static string TryCatch<T1, T2>(Action<T1, T2> func, T1 param1, T2 param2)
{
string runMsg = string .Empty;
try
{
func(param1, param2);
}
catch (Exception ex)
{
runMsg = ex.Message;
}
return runMsg;
} } |
原文使用的是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
方法定義好了,如果調用呢?
這里我們定義一個有參數的方法和一個無參的方法
PRivate void DeleteObj( int objID) {
//主體省略... } |
|