委派(delegate)最簡單的概念是--我們撰寫好的方法,可以交由別人執行。
反過來說---我們要執行的方法,可以交由外部別人決定。
意思是說,我們可以透過委派來傳遞方法。
在C#1.0開始我們就可以用delegate關鍵字來宣告委派,用來接受來自別人的方法
delegate是一個繼承自System.MulticastDelegate的類別,代表我們宣告的delegate可以接受多個方法。
而該類別的父類別是System.Delegate,祖類別是System.Object。
雖說delegate本身是類別,但是定義方式跟方法有點像,要明確表明被委派方法的傳入型別
與回傳型別
,例如:
public delegate void 要做的事情();
public delegate void 要通知的對象(string 通知內容);
public delegate string 要通知的對象(string 通知內容);
使用方式就是new一個委派實體,並傳入被委派的方法
例如以下程式碼是計算完成時,交由委派用Invoke()執行通知誰:
Invoke也可以省略,以下兩個寫法都會去執行被委派的方法
委派也可以接受多個方法一次執行,或能傳入字串的,寫法就是這樣:
執行結果:
這次我把計算從0加到10的方式包裝進一個類別裡:
public class 計算
{
public delegate void 要做的事情(int 通知);
public void 計算總和(要做的事情 被委派的事情)
{
int 總和 = 0;
for (int j = 0; j <= 10; j++)
{
總和 = 總和 + j;
}
被委派的事情.Invoke(總和);
}
}
執行方式如下: