Является ли это лучшим способом запуска/вызова событий без проверки нуля в 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();
    }
 }

Даже 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
    }
 }

Кто-нибудь может объяснить, почему этого не делать? (за и против)

12
задан Beachwalker 29 November 2012 в 19:56
поделиться