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 回答