Czy jest to lepszy sposób na uruchamianie / wywoływanie zdarzeń bez sprawdzania wartości NULL w języku C #?
Większość kodu, który widziałem, wykorzystuje następujący sposób deklarowania i wywoływania wyzwalania zdarzeń:
<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>
Nawet ReSharper generuje metodę wywołującą w sposób opisany powyżej.
Dlaczego po prostu nie zrobisz tego w ten sposób:
<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>
Czy ktoś może wyjaśnić powód, dlaczego tego nie robić? (pro vs. cons)