Некоторые тексты перед кодом, так что резюме вопроса не искалечено.Зачем кому-то подписываться на событие?
class Tree
{
public event EventHandler MadeSound;
public void Fall() { MadeSound(this, new EventArgs()); }
static void Main(string[] args)
{
Tree oaky = new Tree();
oaky.Fall();
}
}
Я не использовал события многое в C#, но тот факт, что это будет вызывать NullRefEx кажется странным. Ссылка EventHandler считается нулевой, поскольку в настоящее время она не имеет подписчиков, но это не означает, что событие не произошло, не так ли?
EventHandlers отличаются от стандартных делегатов событием ключевое слово. Почему дизайнеры языка не запустили их, чтобы они скрылись в пустоте, когда у них нет подписчиков? (Я понимаю, вы можете сделать это вручную, явно добавив пустой делегат).
Удивительный пример! – 2008-10-16 17:01:54
Также +1 для примера. Я предполагаю, что вызов Fall в одиноком лесу не сгонит MakeSound. – OregonGhost 2008-10-16 17:03:33
, когда дерево падает в лес, и никто не слушает, все еще звучит - он говорит «Moo» – 2008-10-16 17:22:32