この不自然な例を考えてみましょう:
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();
}
}
を見てMain、Fooが 2 回呼び出され、その後actions(今では 2 つのActionインスタンス) の内容が実行されたfooとbarしbazますcallback。
callbackが呼び出されない場合は、破棄されbaz ます(参照が?にcallback含まれているため)。呼び出されたものは破棄されますか?actionsactions.Clear()baz
(私は、テストのためにコンパイラーまたは IDE がオンになっているコンピューターを使用していません)