Ist dies eine bessere Methode zum Auslösen / Aufrufen von Ereignissen ohne Null-Check in C #?

Der meiste Code, den ich gesehen habe, verwendet die folgende Methode, um das Auslösen eines Ereignisses zu deklarieren und aufzurufen:

<code>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();
    }
 }
</code>

Sogar ReSharper generiert eine aufrufende Methode wie oben beschrieben.

Warum nicht einfach so machen:

<code>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
    }
 }
</code>

Kann jemand einen Grund erklären, warum dies nicht zu tun ist? (Pro vs. Contra)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage