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