次のプログラムでは...
using System;
class Program
{
static Parent parent;
static void Main( string[] args )
{
parent = new Parent();
// The program hereafter runs for a long time and occasionally
// causes parent.SomeEvent to be raised.
}
}
class Parent
{
public event EventHandler SomeEvent;
public Parent()
{
new Handler( this );
}
}
class Handler
{
public Handler( Parent parent )
{
parent.SomeEvent += parent_SomeEvent;
}
void parent_SomeEvent( object sender, EventArgs e )
{
// Does something important here.
}
}
インスタンス化されたHandler
オブジェクトは、サブスクライブされていますが、参照されていないことに注意してくださいSomeEvent
。プログラムがしばらく実行された後、ガベージ コレクターがHandler
インスタンスを削除することを決定し、そのparent_SomeEvent
ハンドラーが発生するたびに呼び出されなくなる可能性はありparent.SomeEvent
ますか?
私が書いているアプリについては、この説明が必要です。Handler
上記のように、参照されずにインスタンス化される のようなオブジェクトが多数あります。の主な目的Handler
は、 にサブスクライブすることSomeEvent
です。インスタンスへの参照に対して呼び出す便利なメソッドはないHandler
ため、それ以外の場合は参照しなくても問題ありません。デバッグ中に問題が発生したことはありません。しかし、アプリが長時間実行され、ガベージ コレクターがよりアクティブになっている場合、展開後に問題が発生する可能性があることを懸念しています。