gpt4 book ai didi

c# - 为什么 C# 要求您在每次触发事件时都编写空检查?

转载 作者:IT王子 更新时间:2023-10-29 04:32:43 25 4
gpt4 key购买 nike

这对我来说似乎很奇怪——VB.NET 通过其 RaiseEvent 关键字隐式处理 null 检查。它似乎大大增加了围绕事件的样板文件数量,但我看不出它提供了什么好处。

我确信语言设计者有充分的理由这样做..但我很好奇是否有人知道为什么。

最佳答案

这当然是一个烦恼点。

当您编写访问类中类似字段的事件的代码时,您实际上正在访问该字段本身(模数 C# 4 中的一些更改;让我们暂时不去那里) .

因此,选项将是:

  • 特殊情况下类似字段的事件调用,这样它们实际上并不直接引用该字段,而是添加了一个包装器
  • 以不同方式处理所有委托(delegate)调用,这样:

    Action<string> x = null;
    x();

    不会抛出异常。

当然,对于非 void 委托(delegate)(和事件),这两个选项都会引发问题:

Func<int> x = null;
int y = x();

应该默默地返回 0 吗? (int 的默认值。)或者它实际上是在掩盖错误(更有可能)。让它默默地忽略您正在尝试调用空委托(delegate)这一事实会有些不一致。在这种情况下会更奇怪,它不使用 C# 的语法糖:

Func<int> x = null;
int y = x.Invoke();

基本上,无论您做什么,事情都会变得棘手并且与语言的其余部分不一致。我也不喜欢它,但我不确定实用但一致的解决方案可能是什么......

关于c# - 为什么 C# 要求您在每次触发事件时都编写空检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com