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
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!