委托是 .NET 中一種定義方法簽名的類型,可以說是強類型的函數指標。它允許將方法作為參數傳遞,或作為回調函數使用。想深入了解委托基礎的讀者,可參考 MSDN 官方文檔。
委托在內部主要由三部分組成:_target、_methodPtr 以及委托鏈。以下以一個簡單的 Demo 為例說明:
using System;
namespace _01Delegate
{
// 定義委托類型,約束方法簽名
public delegate int AddDele(int a, int b);
class Program
{
static void Main(string[] args)
{
// 靜態方法委托
AddDele delStatic = new AddDele(Add);
Console.WriteLine(delStatic(3, 4)); // 輸出 7
// 實例方法委托
Program p = new Program();
AddDele delInstance = new AddDele(p.AddInstance);
Console.WriteLine(delInstance(4, 5)); // 輸出 9
Console.ReadKey();
}
// 靜態方法
static int Add(int a, int b) { return a + b; }
// 實例方法
public int AddInstance(int a, int b) { return a + b; }
}
}
null;若指向實例方法,則指向該實例(上例中 delInstance._target 指向 p)。+= 操作串聯多個委托,形成調用鏈,依次調用鏈上的每個方法。下圖直觀展示了委托的內部結構:

以上是筆者對委托內部原理的理解,如有不當之處歡迎指正交流。希望能幫助大家更透徹地掌握委托機制。