当您重载一个操作符时,比如operator +,编译后的CIL看起来像这样:
.method public hidebysig specialname static bool op_Addition(...) { ... }为什么在这里使用名称op_Addition而不使用名称+
我建议CIL语法应该是
.method public hidebysig specialname static bool +(...) { ... }在查找它时,成员名称应该是+而不是op_Addition。
注意:这是一个关于语言设计的问题;“因为规范这么说”不是一个有帮助的答案。
发布于 2011-10-21 22:46:50
如果将方法命名为+,那么只有支持操作符重载或允许+作为标识符的语言才能调用底层方法。
CLS为标识符规则采用的编程语言中的Unicode标准defines a syntax for identifiers (见附件7)在该语法中不包括+。因为大多数支持Unicode标识符的语言都会遵循这种语法,所以期望这些语言允许+作为标识符是不合理的。
发布于 2011-10-21 22:43:17
CLR不知道运算符,因此c#编译器生成具有这些特殊名称的方法,以便其他不支持运算符的.net语言可以将它们作为方法使用。
对于这类问题,CLR Via c#是一个很好的参考资料。
https://stackoverflow.com/questions/7851007
复制相似问题