私はWPFアプリケーションでC#のコードに従っており、イベントを切り離す際に質問があります。イベントを切り離す
public class Publisher
{
public event EventHandler Completed;
public void Process()
{
// do something
if (Completed != null)
{
Completed(this, EventArgs.Empty);
}
}
}
public class Subscriber
{
public void Handler(object sender, EventArgs args) { }
}
使用法:私はハンドラメソッドを解除して、アプリケーション内の任意のメモリリークの原因となる、次のコード行を使用してnullにオブジェクトを設定していけない場合
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
pub.Completed += sub.Handler;
// this will invoke the event
pub.Process();
ここに私の質問は、ありますか?
pub.Completed -= sub.Handler
pub=null;sub=null;
いいえ、そのスニペットではありません。 Publisherオブジェクトは、コードを含むメソッドのローカル変数によってのみ参照されます。したがって、pub.Publish()が完了するとすぐに、両方のオブジェクトを同時にガベージコレクションできます。購読者をずっと長くしている出版社は、もっと厄介なシナリオです。 –