Вертикальная прокрутка внутри группы

Существует небольшая вероятность, что SomethingHappened станет null после нулевой проверки, но до вызова. Однако MulticastDelagate s неизменяемы, поэтому, если вы сначала назначили переменную, нулевую проверку против переменной и вызовите ее, вы можете быть в безопасности от этого сценария (self plug: я написал сообщение в блоге об этом некоторое время назад).

Однако есть оборотная сторона монеты; если вы используете подход temp variable, ваш код защищен от NullReferenceException s, но может случиться так, что событие вызовет прослушиватели событий после того, как они были отделены от события . Это всего лишь кое-что, с чем можно справиться самым изящным способом.

Чтобы обойти это, у меня есть метод расширения, который я иногда использую:

public static class EventHandlerExtensions
{
    public static void SafeInvoke(this EventHandler evt, object sender, T e) where T : EventArgs
    {
        if (evt != null)
        {
            evt(sender, e);
        }
    }
}

Используя этот метод , вы можете вызвать такие события, как это:

protected void OnSomeEvent(EventArgs e)
{
    SomeEvent.SafeInvoke(this, e);
}

1
задан Bob van 't Padje 18 March 2019 в 19:04
поделиться