为什么委托不处理事件null

mar*_*tin 5 c# null delegates

调用委托时,您始终必须检查它是否为空.这通常是导致错误的原因.由于委托或多或少只是一个函数列表,我认为这可以由委托本身轻松检查.

有谁知道,为什么它已经实施了?

Bri*_*sen 6

这可能是明显的,但你可以声明你的事件指向一个no-op处理程序,然后你不需要在调用时检查null.

public event EventHandler MyEvent = delegate { };
Run Code Online (Sandbox Code Playgroud)

然后你可以调用指向的处理程序MyEvent而不检查null.


Eam*_*nne 1

我猜原因是历史和一致性。

与其他类型的处理方式一致;例如,在处理问题时没有语言或平台帮助null- 程序员有责任确保永远不会实际使用 null 占位符 - 如果您希望调用方法的对象引用不为 null,则无法仅选择性地调用该方法, 毕竟。

这是历史,因为大多数类型默认情况下都包含空引用,尽管这不是必需的。也就是说,引用类型始终可以为空,而不是像值类型一样对待引用类型并需要额外的“可空性”注释来允许可为。我确信在设计 Java 和 .NET 时,这是有原因的,但它引入了许多不必要的错误和复杂性,而这些错误和复杂性在强类型语言(例如 .NET 值类型)中很容易避免。但考虑到历史上包含了null类型系统范围内的“无效”值,可以这么说,对代表来说这样做也是很自然的。