为什么C#不允许显式调用运算符或属性访问器

本文关键字:属性 访问 运算符 调用 不允许 为什么 | 更新日期: 2023-09-27 18:20:01

C#规范可能会这么说,但即使我的搜索中没有显示任何内容,这也不是我想要的答案。

我正在寻找一些场景,这些场景表明直接调用运算符方法(如op_Addition)或属性访问器(如get_Length)可能是个坏主意对于C#语言的设计者来说,这已经足够糟糕了,无法阻止我们这么做。(请参阅编译器错误CS0571。)

具有这种功能的一个相当常见的场景是Func<T>委托应该返回属性的值。也不能使get访问器成为委托的方法。有一个简单的解决方法(使用() => someObject.SomeProperty),但是,即使不考虑开销,它也不如someObject.get_SomeProperty清晰。

我看到的一个复杂情况是,当一个类型定义了多个到不同类型的转换时,方法将具有相同的签名和不同的返回类型,而C#也不允许这样做。但这是一个不同的问题。

为什么C#不允许显式调用运算符或属性访问器

不确定设计者(Anders)为什么选择不支持它,但我提出了一些很好的理由。

  1. 对于那些不知道属性getter的默认名称是get_PropertyName的初学者来说,这会让他们感到困惑(但如果它是标准编译器程序集,则不必如此)。

  2. 你可能会有一些java爱好者,他们永远不会使用约定。

  3. 如果类设计器想要(这是有意义的),您可以有一个Add方法(如DateTime.Add)。这是一个更友好的名字。