C#运算符重载支持像C++一样的"+="吗?

3

我是C++出身的新手,现在在学习C#,我尝试了以下代码:

class Class1
{
    int mI = 0;
    string mS = "ab";

    public static Class1 operator + (Class1 obj1, Class1 obj2)
    {
        return new Class1()
        {
            mI = obj1.mI + obj2.mI,
            mS = obj1.mS + obj2.mS
        };
    }

    public static void operator += (Class1 obj1)
    {
        mI += obj1.mI;
        mS += obj1.mS;
    }
}

我发现operator+=函数编译不通过,显示如下错误:

error CS1019: 需要可重载的一元操作符。

所以C#根本不支持这种类型的运算符重载吗?

1
能够这样做有什么用呢?重载+运算符会得到相同的结果。 - Franck
8
“RTFM”(请参阅文档):赋值运算符不能显式重载。但是,当您重载二元运算符时,相应的赋值运算符(如果有的话)也会隐式地被重载。例如,+=使用+进行计算,而+可以被重载。 - Sinatr
@Franck C++程序员通常会重载operator+=,然后使用它来重载operator+。以下是C++ Primer的提示:“定义算术运算符和相关复合赋值运算符的类通常应该通过使用复合赋值运算符来实现算术运算符。” - Ayxan Haqverdili
我来自C++,作为新手使用C#。不要用C++作为模型编写C#代码,这是一条很滑的坡道。基于另一种语言编写代码(或希望编写代码)只会让熟悉C#的人发现你编写的代码看起来奇怪、不同,并且可能存在微妙的错误。同样地,也不要使用C#作为模型编写C++代码。 - PaulMcKenzie
1个回答

8
根据文档,你可以重载+运算符,但不能重载+=运算符。

赋值运算符不能显式地进行重载。然而,当您重载一个二元运算符时,相应的赋值运算符(如果有)也会隐式地进行重载。例如,+=使用+来计算,而+可以被重载。

所以,正如你所读到的,+=被认为是x = x + y。这就是为什么不允许重载+=运算符的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接