我见过的大多数代码都使用以下方式来声明和调用事件触发:
public class MyExample
{
    public event Action MyEvent; // could be an event EventHandler<EventArgs>, too
    private void OnMyEvent()
    {
        var handler = this.MyEvent; // copy before access (to aviod race cond.)
        if (handler != null)
        {
            handler();
        }
    }
    public void DoSomeThingsAndFireEvent() 
    {
        // ... doing some things here
        OnMyEvent();
    }
 }
甚至 ReSharper 也会以上述方式生成调用方法。
为什么不这样做:
public class MyExample
{
    public event Action MyEvent = delegate {}; // init here, so it's never null
    public void DoSomeThingsAndFireEvent() 
    {
        // ... doing some things here
        OnMyEvent(); // save to call directly because this can't be null
    }
 }
谁能解释为什么不这样做的原因?(优点与缺点)