首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么运算符'+‘使用名称'op_Addition’而不是名称'+'?

为什么运算符'+‘使用名称'op_Addition’而不是名称'+'?
EN

Stack Overflow用户
提问于 2011-10-21 22:36:38
回答 2查看 1.1K关注 0票数 5

当您重载一个操作符时,比如operator +,编译后的CIL看起来像这样:

代码语言:javascript
复制
.method public hidebysig specialname static bool op_Addition(...) { ... }

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

我建议CIL语法应该是

代码语言:javascript
复制
.method public hidebysig specialname static bool +(...) { ... }

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 22:46:50

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

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

票数 13
EN

Stack Overflow用户

发布于 2011-10-21 22:43:17

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

对于这类问题,CLR Via c#是一个很好的参考资料。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7851007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档