1

イベントを null に設定すると、すべてのターゲットが効果的に切り離されますか?

public class Test
{
    public delegate void SomethingHappenedEventHandler(Test obj);
    public event SomethingHappenedEventHandler SomethingHappened;

    private void OnSomethingHappened()
    {
        if (this.SomethingHappened != null)
            this.SomethingHappened(this);

        //Once this event is fired, do not allow any more invocations!
        this.SomethingHappened = null;
    }
}

すべてのイベントを手動でデタッチする代わりに:

public class Thing
{
    priavte Test Testing { get; set; }

    public Thing()
    {
        this.Testing = new Test();
        this.Testing.SomethingHappened += DoSomething;
    }

    private void DoSomething(Test obj)
    {
        //Do some stuff.
        //Detach manually.
        this.Testing.SomethingHappened -= DoSomething;
    }
}
4

1 に答える 1

2

はい、nullリストからサブスクライバーを効果的に削除します。心に留めておく必要がある唯一のことは、次にそのイベントを発生させたときに、NullReferenceException. したがって、値を確認しているnot nullので問題ありませんが、呼び出すたびに必ず確認してください。

于 2013-02-23T00:01:11.380 に答える