委派是型別安全的函式指標,封裝了一或多個方法的參考。不同於 C++ 函式指標,委派是物件、支援多播、與型別系統整合,是事件模式的基石。
| 語言 | 對應機制 | 範例 |
|---|---|---|
| C++ | 函式指標 | typedef int (*GetNum)(double); |
| Delphi | 程序型別 | type TGetNum = function(rNum: Real): Integer; |
| C# | 委派 | delegate string Do(string cmd); |
經典「秘書模式」:主管(呼叫者)不需知道具體執行者(市場專員、生產專員),只對秘書(委派)下達指令,秘書依指令分派任務並回傳結果。
delegate string Do(string command);Do d = new Do(obj.Method); 或 Do d = obj.Method; (C# 2.0+ 方法群組轉換)d("command");委派不在乎目標方法是靜態還是實例方法,只要簽章相符即可。範例中 MarketMan.GetMarketInfo 為實例方法,ProductMan.ProduceProduct 為靜態方法,同一委派型別皆可指向。
+/- 運算子串聯多個方法,依序呼叫Do d = cmd => ...; 簡化內嵌邏輯event 關鍵字限制外部只能 +=/-=,防止直接呼叫EventHandler<TEventArgs> 模式實作事件WeakEventManager 解決長壽命發布者與短壽命訂閱者的參考問題