maggior parte del codice che ho visto utilizza il seguente modo di dichiarare e richiamare cottura evento:È un modo migliore per attivare/invocare eventi senza un controllo Null in C#?
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();
}
}
Anche ReSharper genera un metodo invocante il modo di cui sopra.
Perché non basta fare in questo modo:
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
}
}
Qualcuno può spiegare un motivo per cui non fare questo? (pro vs. contro)
Ho sentito che Jon Skeet fa entrambe le cose ... –
Penso che nella maggior parte dei casi non è importante farsi notare se c'è almeno un ascoltatore "reale" collegato ... come visto sopra c'è già un controllo nullo se usato in modo "normale". – Beachwalker
possibile duplicato di [C'è un lato negativo nell'aggiunta di un delegato vuoto anonimo sulla dichiarazione di eventi?] (Http://stackoverflow.com/questions/170907/is-there-a-downside-to-adding-an-anonymous-empty -delegate-on-event-declaration) – CodesInChaos