委派是 C# 中較複雜的概念,類似 C/C++ 的函式指標,可將方法參考封裝後透過委派物件呼叫。其特性在於不需知道被參考方法屬於哪個類別物件,只要參數個數與回傳型別與委派一致即可。
// 定義回傳 string、無參數的委派
delegate string MyDelegate();
public class MyClass
{
public string SayHello() { return "Hello the world!"; }
}
public class TestMyClass
{
public static void Main(string[] args)
{
MyClass myClass1 = new MyClass();
MyDelegate myDelegate1 = new MyDelegate(myClass1.SayHello);
// 使用委派呼叫方法
System.Console.WriteLine(myDelegate1()); // 輸出: Hello the world!
}
}
委派可使用 + 組合、- 移除,形成多點廣播委派:
delegate void MyDelegate(string s);
public class MyClass
{
public void SayHello(string who) { System.Console.WriteLine(who + " hello!"); }
public void SayGoodBye(string who) { System.Console.WriteLine(who + " good bye!"); }
}
public class TestMyClass
{
public static void Main(string[] args)
{
MyClass myClass1 = new MyClass();
MyDelegate myDelegate = new MyDelegate(myClass1.SayHello);
MyDelegate myDelegate1 = new MyDelegate(myClass1.SayGoodBye);
myDelegate += myDelegate1; // 組合
myDelegate("love.Net "); // 同時呼叫兩個方法
// 輸出: love.Net hello! love.Net good bye!
}
}
多點廣播委派是事件機制的基礎,允許一個事件通知多個訂閱者。