看似無法存取區域變數的匿名方法,實際編譯器自動完成捕獲:
public class Program
{
public delegate void MyDelegate();
public static void Main(string[] args)
{
int iTemp = 100;
MyDelegate dlg = delegate { Console.WriteLine(iTemp); };
dlg();
}
}
private class InnerClass 巢狀類別public int iTemp 實例欄位public void InstanceMethod() 實例方法包裝匿名方法本體InnerClass localObject = new InnerClass() 取代區域變數宣告iTemp 的存取改為 localObject.iTempnew MyDelegate(localObject.InstanceMethod) 取代匿名方法定義
public class Program
{
private class InnerClass
{
public void InstanceMethod() => Console.WriteLine(iTemp);
public int iTemp;
}
public delegate void MyDelegate();
public static void Main(string[] args)
{
InnerClass localObject = new InnerClass();
localObject.iTemp = 100;
MyDelegate dlg = new MyDelegate(localObject.InstanceMethod);
dlg();
}
}

圖示:ILDASM 顯示 Program 類別下自動新增的 InnerClass 巢狀類別。