匿名方法未使用外部變數(僅用參數/類成員),編譯器生成私有方法:
<return type> __AnonymousMethod$<random>(<params>)
new SomeDelegate(__AnonymousMethod$00000000)。使用區域變數(外部變數)時,編譯器生成巢狀閉包類別:
__LocalsDisplayClass$<random>
{
public OuterClass <this>; // 外部類別 this 參考
public string capturedVar; // 每個捕獲變數一個公共欄位
public void __AnonymousMethod$<random>(params) { /* 方法體 */ }
}
// 原始碼
string msg = "Hello";
SomeDelegate del = delegate(string name) { MessageBox.Show(msg + " " + name); };
del("Juval");
// 編譯器生成
var locals = new __LocalsDisplayClass$00000001();
locals.<this> = this;
locals.msg = msg;
SomeDelegate del = new SomeDelegate(locals.__AnonymousMethod$00000000);
del("Juval");
<this> 欄位保存外部類別實例,存取類成員用。