FUNC<>與ACTION<>本質都是委派(Delegate),只是又多包了一層。
//Func 方法簽章
public delegate TResult Func<out TResult>();//action 方法簽章
public delegate void Action<in T>(T obj);
從方法簽章中可以看出 FUNC就是有一個回傳值的委派,而 ACTION是沒有回傳值的委派。雖然兩者各有一堆多載,但是原則上是相同的。
那甚麼是委派呢?MSDN的解釋比較文謅謅,簡單來說就是允許將方法當作參數進行傳遞。
最簡單的例子就是WINFORM按鈕(button)的Click動作。當按鈕建立時,點擊兩下VS就會自動建立一個Button1_Click的Function,給我們自行實作
private void Button1_Click(object sender, EventArgs e){}
打開Designer.cs,可以發現VS幫我們把Button1_Click這個Function透過EventHandler綁在Click事件上。
追進去EventHandler會發現它其實就是委派。
假設我們有一組事件而行為要依事件不同而有所不同。用委派可以寫成
改為FUNC<T> 則是
適時的善用Delegate能讓程式的耦合性降低,提升靈活性。