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

时间:2012-01-11 02:57:18

标签: c# language-design

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

我正在寻找可以直接调用操作符方法(如op_Addition)或属性访问器(如get_Length)的方案。 对C#语言的设计者来说已经足够阻止我们这样做了。(参见compiler error CS0571。)

拥有此功能有用的一个相当常见的情况是Func<T>委托应该返回属性的值。您也不能将get访问器设置为委托的方法。有一个简单的解决方法(使用() => someObject.SomeProperty),但是,除了开销之外,它不像someObject.get_SomeProperty那样清晰。

我看到的一个复杂因素是,当一个类型定义了多个不同类型的转换时,这些方法将具有相同的签名和不同的返回类型,C#也不允许这样做。但那是different question

1 个答案:

答案 0 :(得分:1)

不确定为什么设计师(安德斯)选择不支持它,但这是我提出的一些很好的理由。

  1. 对于不知道属性getter的默认名称是get_PropertyName的初学者来说会很困惑(但如果它是标准的编译器程序集则不一定是这样)。

  2. 你可能会有一些永远不会使用约定的java-ophiles。

  3. 如果班级设计师想(并且有意义),您可以使用Add方法(如DateTime.Add)。这是一个更友好的名字。