为什么"公共事件EventHandler cccc"为空?

Mat*_*att 3 .net c# events

为什么"公共事件EventHandler cccc"为空?

我有一堂课

public class Builder
{
    public event EventHandler StartedWorking;

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

    public void Start()
    {
       StartedWorking(this, eventargobject); //StartedWorking is null --
    }
}   
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,我一直在做什么?我错过了一些明显的东西,或者有什么东西可以导致这种情况?

编辑:

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

EDIT 2:

我想我从未有过从未订阅的事件,因此从未遇到过这种情况 - 你每天都学到新东西对于看似愚蠢的问题抱歉....

Ree*_*sey 12

除非有人订阅了该事件,否则事件处理程序将为null.一旦委托订阅了该事件,它就不再是空的.

这就是为什么总是建议使用以下表格来举起活动:

public void Start()
{
    var handler = this.StartedWorking;
    if (handler != null)
    {
         handler(this, eventArgObject);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有订阅者,这可以保护您免受空异常的影响.

  • 在null检查和调用本身之间取消订阅事件的情况下,分配变量也会阻止您处理竞争条件. (5认同)
  • handler?.Invoke(this, eventArgObject); (2认同)