繁体   English   中英

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

[英]Why must C# operator overloads be static?

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

Eric Lippert 在一篇博客文章中详细回答了这个问题,该文章已被删除。 这是存档版本

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

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;

因此,即使引用为空,您也可以调用运算符。 对于实例运算符,情况并非如此。

看看这个帖子

有几个原因,主要似乎是为了保持运算符的对称性(例如二元运算的左侧没有得到特殊处理,因为它负责调度运算)。

也许最好想想为什么方法不应该是静态的。 不需要状态,因此不需要状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM