为什么C#运算符重载必须是静态的?

为什么C#要求运算符重载是静态方法而不是成员函数(如C ++)? (也许更具体地说:这个决定的设计动机是什么?)

看看这篇文章 。

有几个原因,主要看来是保持操作员对称性(这样二进制操作的左侧不会得到特殊处理,因为负责调度操作)。

这里以难以捉摸的细节回答:

http://blogs.msdn.com/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx

关于值类型和实例运算符还有另一个微妙的观点。 静态运算符使这种代码成为可能:

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,也可以调用运算符。 例如,运营商不会这样。

或许最好的想法为什么这些方法不应该是静态的。 没有必要是国家,因此也是如此。