c# delegate 介紹
分類
建立時間: 2023年8月30日 20:56
更新時間: 2023年8月30日 21:02
簡介
簡單介紹 delegate 委託是什麼和使用方式。
delegate 委託
delegate 是一種可以讓方法或函式可以當作參數傳遞的一種類型,因為 c# 是強型別的語言,所以要實現傳遞方法參數就不能像弱型別語言輕鬆。
請看此範例。
public delegate void Callback(string message);
// Create a method for a delegate.
public static void DelegateMethod(string message)
{
Console.WriteLine(message);
}
// Instantiate the delegate.
Callback handler = DelegateMethod;
// Call the delegate.
handler("Hello World");
範例定義了一個 Callback
委託方法,你可以想像成定義類別,DelegateMethod
是一般的靜態方法,Callback handler = DelegateMethod;
就像宣告一個變數一樣, handler
是一個方法變數,類型是 Callback
,代表它必須是 void,而且裡面會有一個 string 參數,DelegateMethod
剛好符合這個條件,所以可以賦值給 handler
,這樣 handler
就可以像 DelegateMethod
一樣調用方法。
接下來是把 delegate 當作方法參數的範例。
public static void MethodWithCallback(int param1, int param2, Callback callback)
{
callback("The number is: " + (param1 + param2).ToString());
}
MethodWithCallback(1, 2, handler);
這就是把函式當作參數傳遞的整個過程。
delegate 加減法運算
delegate 變數可以使用加減法運算,使其同時具備多個方法,delegate 變數具備多個方法時,調用也會同時調用多個方法。
public class MethodClass
{
public void Method1(string message) { }
public void Method2(string message) { }
}
var obj = new MethodClass();
Callback d1 = obj.Method1;
Callback d2 = obj.Method2;
Callback d3 = DelegateMethod;
//Both types of assignment are valid.
Callback allMethodsDelegate = d1 + d2;
allMethodsDelegate += d3;
//remove Method1
allMethodsDelegate -= d1;
// copy AllMethodsDelegate while removing d2
Callback oneMethodDelegate = allMethodsDelegate - d2;
callback 介紹
callback(回調) 這個詞並不是隨便亂取,如範例 MethodWithCallback
調用 callback
,意思就是往回調用外部傳遞進來的方法,所以我們都稱呼 callback function,意思大概是這樣,但這個解釋是我自己以白話的方式表示的,可能不夠嚴謹,在許多程式語言中都可以使用這個技巧,尤其 javascript 更是常見。
結論
本篇使用簡單、粗略的方式介紹 delegate,更詳細的解釋請參考最後附上的參考連結。
參考
觀看次數: 1177
c#delegate
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!