▌Action & Func
Action<T, T…> 沒有回傳值的泛型委派
Func<T,T…> 可以回傳值的泛型委派
對小弟來說,泛型委派和Delegate最大的差別就是,不用先宣告一個Delegate定義名稱。
使用上較方便。
直接看範例…
▌Sample
先定義一個CName物件,裡面會放要委派的方法。
public class
CName :IDisposable
{
private
String sName;
public
CName(string name)
{ this.sName
= name; }
/// <summary>
/// 沒有參數,沒有回傳值
/// </summary>
public
void DisplayToConsole() { //… }
/// <summary>
/// 一個參數,回傳String型別
/// </summary>
public
String DisplayToWindow(String sDesc) {
//… }
/// <summary>
/// 兩個參數,回傳String型別
/// </summary>
public
String DisplayToWindow(String sDesc01, String
sDesc02) { //… }
/// <summary>
/// 泛型:兩個個參數,無回傳值
/// </summary>
public
void Combine<T>(T itemA, T itemB) { //…
}
/// <summary>
/// 泛型:兩個個參數,回傳String型別
/// </summary>
public
String Combine_WithRtnVal<T>(T
itemA, T itemB) { //… }
}
|
▋Delegate
public delegate
void ShowName();
/* 測試Delegate */
using (CName
cName = new CName("Delegate測試"))
{
ShowName
_showName = cName.DisplayToConsole;
_showName();
}
|
▋Action 匿名委派
/* 測試Action匿名委派 */
using (CName
cName = new CName("Action匿名委派"))
{
Action
_showNameActDel = cName.DisplayToConsole;
_showNameActDel();
}
|
▋Generic Action 泛型匿名委派
/* 測試Action泛型匿名委派 */
using (CName
cName = new CName("Generic Action"))
{
Action<String, String>
_showNameActGen = (x, y) => cName.Combine(x, y);
//Action<String>
_showNameActGen = cName.Combine<String>;
_showNameActGen("1", "2");
}
|
PS. Action<String, String>
指的是委派的方法裡面須帶兩個String參數。
▋Generic Func
/* 測試Func泛型匿名委派 */
using (CName
cName = new CName("Generic Func"))
{
Func<int, int, String> _showNameFuncGen = (x, y) =>
cName.Combine_WithRtnVal(x, y);
String
sRslt = _showNameFuncGen(1, 2);
}
|
PS. Func<int, int, String> 指的是委派的方法裡面須帶兩個int參數,回傳String。
如果意猶未盡,可以參考MSDN的詳細說明 !
沒有留言:
張貼留言