Исходя из Java-фона, это всегда казалось мне странным. Я думаю, что никто не слушает событие совершенно правильно. Особенно, когда слушатели добавляются и удаляются динамически.
Мне кажется, это одна из ошибок C #, которая вызывает ошибки, когда люди не знают / не забывают каждый раз проверять на ноль.
Сокрытие этой детали реализации кажется хорошим планом, поскольку она не помогает читабельности проверять наличие нулей каждый раз. Я уверен, что MSFT скажут, что есть выигрыш в производительности, не создавая событие, если никто не слушает, но imho оно значительно перевешивает бессмысленные исключения / уменьшение нулевого указателя в читаемости в большинстве бизнес-кода.
Я бы также добавил эти два метода в класс:
public static void Raise(this EventHandler handler, object sender)
{
Raise(handler, sender, EventArgs.Empty);
}
public static void Raise<TA>(this EventHandler<TA> handler, object sender, TA args)
where TA : EventArgs
{
if (handler != null)
{
handler(sender, args);
}
}