为什么将名称'op_Addition'用于运算符'+'而不是名称'+'?

时间:2011-10-21 14:36:38

标签: c# cil

当您重载运算符(例如operator +)时,编译的CIL看起来像这样:

.method public hidebysig specialname static bool op_Addition(...) { ... }

为什么在这里使用名称op_Addition而不是名称+

我建议CIL语法应该是

.method public hidebysig specialname static bool +(...) { ... }

成员名称在查找时,应为+而不是op_Addition

注意:这是关于语言设计的问题; “因为规范这么说”并不是一个有用的答案。

2 个答案:

答案 0 :(得分:13)

如果您将方法命名为+,那么只有支持运算符重载的语言或允许+作为标识符的语言才能调用基础方法。

编程语言中的Unicode标准defines a syntax for identifiers(参见附件7)由CLS用于标识符规则,在该语法中不包括+。由于大多数支持Unicode标识符的语言都遵循该语法,因此期望这些语言允许+作为标识符是不合理的。

答案 1 :(得分:1)

CLR不了解运算符,因此c#编译器生成具有特殊名称的方法,以便其他不支持运算符的.net语言可以将它们作为方法使用。

CLR Via c#是此类问题的一个很好的参考。