【发布时间】:2008-10-16 16:56:26
【问题描述】:
代码前的一些文本,以便问题摘要不会被破坏。
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 引用被认为是空的,因为它目前没有订阅者 - 但这并不意味着事件没有发生,不是吗?
EventHandler 与标准委托的区别在于 event 关键字。为什么语言设计者不让他们在没有订阅者的情况下默默地向虚空开火? (我认为您可以通过显式添加一个空委托手动执行此操作)。
【问题讨论】:
-
这个例子也是 +1。我想在寂寞的森林中调用 Fall 不会触发 MadeSound。
-
当一棵树倒在森林里而没有人在听时,它仍然会发出声音——它会说“哞”
-
我在下面发布了一个使用扩展方法的示例,我相信它可以实现您想要的——将所有空检查隔离在一个位置。