考慮這個人爲的例子:在Main
如果當地人被超出範圍之後被調用的匿名函數引用,會發生什麼?
public static class Test {
private static List<Action> actions = new List<Action>();
private static Int32 _foo = 123;
public static void Foo() {
Int32 foo = _foo += 123;
Object bar = new Object();
IDisposable baz = GetExpensiveObject();
Action callback = new Action(delegate() {
DoSomething(foo, bar, baz);
baz.Dispose();
});
foo = 456;
bar = new Object();
actions.Add(callback);
}
public static void Main() {
Foo();
Foo();
foreach(Action a in actions) a();
}
}
來看,假設Foo
被調用了兩次,和actions
內容(現在,2個Action
實例)之後執行的,什麼是變量的狀態foo
,bar
和baz
在callback
之內?
如果callback
不會被調用,將baz
永遠處置(由於包含在actions
包含在callback
參考?),什麼是actions.Clear()
被調用時,將baz
處置的呢?
(我不是在對我進行測試編譯器或IDE計算機)
您位於可上網的電腦上,因此您可以訪問IDE:http://ideone.com/ – Henrik