2012-02-08 9 views
2

最近、私はたくさんの匿名メソッドを使用しているので、私は好きでない場合、私は疑問に思う:このChildWindowはGCによって収集されますか?

セイを私のメイン・ウィンドウクラスでは、私が持っている:この場合、

ChildWindow myChildWindow = new ChildWindow(); 
myChildWindow.Closing+= (o, e) => { 
//DoSomething 
rootGrid.Children.Remove(o as ChildWindow); 
} 
this.rootGrid.Children.Add(myChildWindow); 
myChildWindow.Show(); 

私がすることはできません匿名メソッドで定義されているため、イベントハンドラは.Closingから削除してください。

このChildWindowはまだGCによって収集されますか?

答えて

1

はい。

あなたがしているのは、クロージャオブジェクトを持つデリゲートを作成し、それを子ウィンドウから参照するだけです。

追加の参照を作成していません子ウィンドウ。

+0

閉包オブジェクトがChildWindowクラスで定義されているオブジェクトであることを意味しますか? 'public ClosingHandler Closing'のように?したがって、もし私のMainWindowクラスがまだChildWindow 'ChildWindow anotherReferece = myChildWindow'へのオブジェクト参照を持っているとしたら、それはGCによって収集されません。 –

+0

閉鎖の詳細については、[私のブログ投稿](http://blog.slaks.net/2011/06/delegates-vs-function-pointers-part-4-c.html)を参照してください。ここでGCについて心配する必要はありません。 – SLaks

関連する問題