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)