C#中的事件发射是否始终受到无效检查



这种情况对我来说似乎很有趣。

在C#中,您需要在触发之前检查课程中是否有任何侦听器。

假设C#的事件结构是一种非固定(Microsoft做到的)实现观察者可观察模式以易于使用的实现。

为什么他们不在该结构内实现此功能?是否有可靠的理由或文档。

是必要的,还是在所有情况下对需要零检查的事件结构进行的假设,我是错误的。

这是一个好奇的问题,正在寻找微软对此实现选择的答案。我希望这将导致对代表和事件关键字内部工作的进一步理解。

是的,您必须进行null检查。

调用null的委托会导致NullReferenceException

您可能会很想用非零事件处理程序进行所有代表。但是,就CPU使用,内存使用和代码行而言,这将比null的测试要差得多。

在埃里克·冈纳森(Eric Gunnerson)的博客中对此问题有回复。

基本上似乎说Microsoft考虑了更改它,但它会破坏现有代码。

换句话说,在原始设计中是一个错误,但是修复它为时已晚。

您可以添加默认事件侦听器,从而避免null检查

public Action<object, EventArgs> SomeEvent = (o, e) => { };

以这种方式,您可以在不检查NULL的情况下调用某个Event,因为它包含默认(空实现)侦听器。请注意,它可能会损害性能。

最新更新