为什么C#不允许显式调用运算符或属性访问器
本文关键字:属性 访问 运算符 调用 不允许 为什么 | 更新日期: 2023-09-27 18:20:01
C#规范可能会这么说,但即使我的搜索中没有显示任何内容,这也不是我想要的答案。
我正在寻找一些场景,这些场景表明直接调用运算符方法(如op_Addition
)或属性访问器(如get_Length
)可能是个坏主意对于C#语言的设计者来说,这已经足够糟糕了,无法阻止我们这么做。(请参阅编译器错误CS0571。)
具有这种功能的一个相当常见的场景是Func<T>
委托应该返回属性的值。也不能使get访问器成为委托的方法。有一个简单的解决方法(使用() => someObject.SomeProperty
),但是,即使不考虑开销,它也不如someObject.get_SomeProperty
清晰。
我看到的一个复杂情况是,当一个类型定义了多个到不同类型的转换时,方法将具有相同的签名和不同的返回类型,而C#也不允许这样做。但这是一个不同的问题。
不确定设计者(Anders)为什么选择不支持它,但我提出了一些很好的理由。
-
对于那些不知道属性getter的默认名称是get_PropertyName的初学者来说,这会让他们感到困惑(但如果它是标准编译器程序集,则不必如此)。
-
你可能会有一些java爱好者,他们永远不会使用约定。
-
如果类设计器想要(这是有意义的),您可以有一个Add方法(如
DateTime.Add
)。这是一个更友好的名字。