有人能解释一下为什么.Net框架团队决定没有订阅者的委托应该为空,而不是具有空InvocationList的对象吗?我想知道导致这个决定的理由是什么。
void DoSomething()
{
EventHandler handler = SomeEvent;
if(handler != null) //why is this null-check necessary?
{
handler(this, EventArgs.Empty);
}
}谢谢
发布于 2009-11-02 11:09:48
在CLR级别上,委托字段和事件字段是常规字段。
就像string MyField缺省为null而不是""一样,Action MyField也缺省为null而不是空的Action实例。
发布于 2009-11-02 11:04:58
我同意这可能很麻烦,我个人认为这是一个错误。我想不出任何理由为什么要这样做。
发布于 2009-11-02 11:56:35
请参阅Jon Skeet的答案here,了解有关此问题的详细讨论。在C# 2.0中甚至可以绕过必须检查null的问题。
https://stackoverflow.com/questions/1659248
复制相似问题