C#雜記 — 委派(Delegate)、FUNC<>、ACTION<>

莊創偉
2 min readSep 20, 2019

MSDN

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_ClickFunction,給我們自行實作

private void Button1_Click(object sender, EventArgs e){}

打開Designer.cs,可以發現VS幫我們把Button1_Click這個Function透過EventHandler綁在Click事件上。

追進去EventHandler會發現它其實就是委派。

EventHandler的方法簽章

假設我們有一組事件而行為要依事件不同而有所不同。用委派可以寫成

改為FUNC<T> 則是

適時的善用Delegate能讓程式的耦合性降低,提升靈活性。

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子