为什么C#要求运算符重载是静态方法而不是成员函数(如C ++)? (也许更具体地说:这个决定的设计动机是什么?)
答案 0 :(得分:31)
在这里以难以理解的细节回答:
关于值类型和实例运算符还有另一个微妙的观点。静态运算符使这种代码成为可能:
class Blah {
int m_iVal;
public static Blah operator+ (Blah l, int intVal)
{
if(l == null)
l = new Blah();
l.m_iVal += intVal;
return l;
}
}
//main
Blah b = null;
b = b + 5;
因此,即使引用为null,也可以调用运算符。例如,运营商不会这样。
答案 1 :(得分:26)
看看this post。
有几个原因,主要似乎是保持操作符对称性(这样二进制操作的左侧不会得到特殊处理,因为负责调度操作)。
答案 2 :(得分:0)
或许最好的想法为什么这些方法不应该是静态的。国家没有必要,因此也是如此。