Спасибо за ответы. Я понимаю, почему возникает исключение NullReferenceException и как его обойти.
Гишу сказал
Какой смысл поднять событие, если никто не слушает?
Ну, может, это терминология. Мне кажется, что система «событий» привлекательна тем, что ответственность за последствия произошедшего события должна лежать на наблюдателях, а не на исполнителе.
Возможно, лучше спросить: если поле делегата объявлено с ключевым словом события перед ним, почему компилятор не переводит все экземпляры:
MadeSound(this, EventArgs.Empty)
до
if (MadeSound != null) { MadeSound(this, EventArgs.Empty); }
за кадром так же, как другие ярлыки синтаксиса? Количество стандартных методов проверки на ноль OnSomeEvent, которые люди должны писать вручную, должно быть колоссальным.