c# - 为什么 'public event EventHandler cccc' 为空?

标签 c# .net events

为什么“公共(public)事件 EventHandler cccc”会为空?

我有一个类是

public class Builder
{
    public event EventHandler StartedWorking;

    public Builder()
    { 
        // Constructor does some stuff
    }

    public void Start()
    {
       StartedWorking(this, eventargobject); //StartedWorking is null --
    }
}   

这似乎很简单而且我一直都在做?我是否遗漏了一些明显的东西,或者是否有什么可能导致这种情况?

编辑:

这是否意味着如果我触发一个未在客户端类中订阅的事件,我必须检查它是否不为空?

EDIT-2:

我想我从来没有遇到过从未订阅过的事件,因此也从未遇到过这种情况—— 你每天学习新的东西 抱歉这个看似愚蠢的问题....

最佳答案

除非有人订阅了事件,否则事件处理程序将为空。一旦委托(delegate)人订阅了事件,它就不再为空。

这就是为什么总是建议使用以下形式来引发事件:

public void Start()
{
    var handler = this.StartedWorking;
    if (handler != null)
    {
         handler(this, eventArgObject);
    }
}

如果没有订阅者,这可以保护您免受空异常。

关于c# - 为什么 'public event EventHandler cccc' 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064498/

相关文章:

jquery - 尝试根据当前 div 中应用的背景颜色来更改 div 的背景颜色。

ios - 从另一个 UIViewController 和他的事件复制 UIView

c# - 使用 sharpsvn 驱动程序进行颠覆认证

javascript - 服务器和浏览器日期差异

c# - 通过条件乘以其他两个两个数组来调整数组的长度

.net - 在 .net 中绘制科学数据

javascript - 如何使用相应的currentItemId获取元素的值

c# - 无法打开主机 WCF REST 服务

.net - 儒略日期形式的系统日期?

python - 如何在 Windows 10 上使用 Python 和 WMI 检测亮度变化?