当前位置:  开发笔记 > 编程语言 > 正文

为什么必须有人订阅事件发生?

如何解决《为什么必须有人订阅事件发生?》经验,为你挑选了1个好方法。

代码之前的一些文本,以便问题摘要不会被破坏.

class Tree
{
    public event EventHandler MadeSound;

    public void Fall() { MadeSound(this, new EventArgs()); }

    static void Main(string[] args)
    {
        Tree oaky = new Tree();
        oaky.Fall();
    }
}

我没有在C#中使用过很多事件,但这会导致NullRefEx的事实看起来很奇怪.EventHandler引用被认为是null,因为它当前没有subribers - 但这并不意味着事件没有发生,是吗?

EventHandlers通过event关键字与标准委托区分开来.语言设计师为什么没有设置它们在没有订阅者的情况下默默地射入虚空?(我收集你可以通过显式添加一个空委托手动完成此操作).



1> James Curran..:

那么,规范形式是:

void OnMadeSound()
{
    if (MadeSound != null)
    {
        MadeSound(this, new EventArgs());
    }
}

public void Fall() {  OnMadeSound(); }

这是非常轻微快,调用一个空的代表,所以速度战胜了编程方便.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有