Некоторый текст перед кодом, чтобы вопрос не исказился.
class Tree
{
public event EventHandler MadeSound;
public void Fall() { MadeSound(this, new EventArgs()); }
static void Main(string[] args)
{
Tree oaky = new Tree();
oaky.Fall();
}
}
Я не использовал события много в С#, но факт, что это вызовет NullRefEx, кажется странным. Ссылка EventHandler считается нулевой, поскольку в настоящее время она не имеет подписчиков, но это не означает, что событие не произошло, не так ли?
EventHandlers отличаются от стандартных делегатов ключевым словом событие. Почему дизайнеры языка не запустили их, чтобы они скрылись в пустоте, когда у них нет подписчиков? (Я понимаю, вы можете сделать это вручную, явно добавив пустой делегат).