この不自然な例を考えてみましょう:
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
含まれているため)。呼び出されたものは破棄されますか?actions
actions.Clear()
baz
(私は、テストのためにコンパイラーまたは IDE がオンになっているコンピューターを使用していません)