21.5外部變量
作用域包含匿名方法表達式的任何局部變量、值參數和參數數組,都被稱為匿名方法表達式的外部變量。在類的實例函數成員中,this值被認為是一個值參數,它也是包含在函數成員內的任何匿名方法表達式的外部變量
21.5.1捕獲外部變量
當外部變量通過匿名方法而被引用時,就可以說這個外部變量被匿名方法所捕獲(captured)了。通常,局部變量的生存期被限制為它所關聯的程序塊或語句的執行區(§5.1.7)。但被捕獲的外部變量的生存期將至少被延長,直到引用匿名方法的委托可以被垃圾回收時為止。
示例
using System;
delegate int D();
class Test
{
static D F() {
int x = 0;
D result = delegate { return ++x; }
return result;
}
static void Main() {
D d = F();
Console.WriteLine(d());
Console.WriteLine(d());
Console.WriteLine(d());
}
}
局部變量x被匿名方法所捕獲,並且x的生存期至少被延長,直到從F中返回的委托可以被垃圾回收為止(在這裡,這一點直到程序結束才滿足),既然匿名方法的每次調用都在x的相同實例上進行操作,該示例輸出的結果為: