Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么要使用名称';op#U添加';对于操作员'+';而不是名字'+';?_C#_Cil - Fatal编程技术网

C# 为什么要使用名称';op#U添加';对于操作员'+';而不是名字'+';?

C# 为什么要使用名称';op#U添加';对于操作员'+';而不是名字'+';?,c#,cil,C#,Cil,当您重载运算符时,例如运算符+,编译的CIL如下所示: .method public hidebysig specialname static bool op_Addition(...) { ... } 为什么在这里使用名称op_Addition,而不是名称+ 我建议CIL语法应该是 .method public hidebysig specialname static bool +(...) { ... } 在查找时,成员名称应该是+,而不是op\u Addition 注:这是一个关于语言

当您重载运算符时,例如
运算符+
,编译的CIL如下所示:

.method public hidebysig specialname static bool op_Addition(...) { ... }
为什么在这里使用名称
op_Addition
,而不是名称
+

我建议CIL语法应该是

.method public hidebysig specialname static bool +(...) { ... }
在查找时,成员名称应该是
+
,而不是
op\u Addition


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

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


是此类问题的良好参考。

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


程序设计语言中的Unicode标准(见附录7)为标识符规则所采用,不包括该语法中的
+
。由于大多数支持Unicode标识符的语言都将遵循该语法,因此期望此类语言允许
+
作为标识符是不合理的

“因为说明书上说。。。nvm我想op_加法比++更容易解析。也许您可以解释一下为什么建议将其称为
++
。简单地说“它应该是
+
”和我说的“因为规范这么说”一样没有帮助。@BoltClock:因为操作符是
+
,而不是
操作添加。将其称为
+
更为自然。当然,设计者有这样做的原因,我只是想知道这些原因可能是什么。我的问题是,由于op_加法实际上只是另一种方法,它接受2个特定类型的输入并返回第三个,所以这样调用它更方便。检查生成的CIL是否添加了2个INT,以及是否添加了2个带有自定义+运算符实现的自定义结构。第一个将简单地调用CIL指令来添加int,后者将调用method@HansPassant:一元
+
也应称为
+
。这就是重载的作用。。。