Большинство кода, который я видел, использует следующий способ объявления и вызова запуска события:
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
}
}
Кто-нибудь может объяснить, почему этого не делать? (за и против)