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

时间:2010-01-07 03:53:46

标签: c# c++ static operator-overloading language-design

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

3 个答案:

答案 0 :(得分:31)

在这里以难以理解的细节回答:

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

答案 1 :(得分:26)

看看this post

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

答案 2 :(得分:0)

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