这种情况对我来说似乎很有趣。
在C#中,您需要在触发之前检查类中是否有任何侦听器。
假设C#的事件结构是一个非标准(意思是微软做到了)Observer可观察模式的实现,以方便使用。
为什么他们没有在这个结构中实现这个?这个选择是否有充分的理由或文件。
是否必须进行空检查,或者我在假设所有情况下需要进行空检查的事件结构时是错误的。
这是一个更好的问题,寻找微软的这个实现选择的答案。我希望这将导致进一步了解委托和事件关键字内部工作。
答案 0 :(得分:3)
是的,您必须进行null
检查。
调用null
的委托会产生NullReferenceException
。
您可能想要使用非null的空事件处理程序初始化所有委托。但是,就CPU使用率,内存使用率和代码行而言,这比测试null
要糟糕得多。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以添加默认事件侦听器,从而避免空检查
public Action<object, EventArgs> SomeEvent = (o, e) => { };
以这种方式,您可以在不检查null的情况下调用SomeEvent,因为它包含一个默认(空实现)侦听器。请注意,这可能会影响性能。