委派是型別安全的函式指標,本質上是繼承自 MulticastDelegate 的密封類別。
// 定義:回傳 int,接受兩個 int
public delegate int OperationDelegate(int x, int y);
// 實例化:指向符合簽名的方法
OperationDelegate del = Add; // 靜態方法
// 或
OperationDelegate del = new OperationDelegate(Add);
委派實例可組合多個目標方法:
OperationDelegate chain = null;
chain += Add; // 加入
chain += Multiply; // 加入
chain -= Add; // 移除
// 呼叫時依序執行,回傳值為最後一個目標的回傳值
int result = chain(3, 2);
注意:多播委派回傳值只保留最後一個,若需收集所有結果請自行迴圈呼叫 GetInvocationList()。
// 演算法接受委派參數
public int Operate(int a, int b, OperationDelegate op) => op(a, b);
// 呼叫端決定具體策略
int r1 = Operate(10, 5, Add); // 15
int r2 = Operate(10, 5, Multiply); // 50
int r3 = Operate(10, 5, (x,y) => x - y); // 5 (Lambda)
需求:0~100 數字輸出到 Console、ListBox、檔案
ShowNumberDel 委派此即「策略模式」的委派實作版,避免建立策略介面與多個類別的儀式感。