C# 运算符重载是否支持类似C++"+="?

Does C# operator overloading support "+=" like C++?

本文关键字:C++ 运算符 重载 是否 支持      更新时间:2023-10-16

我来自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+=函数无法编译,说:

错误 CS1019:预期可重载的一元运算符。

所以 C# 根本不做这种运算符重载?

根据文档,您可以重载+,但不能重载+=

不能显式重载赋值运算符。但是,当您重载二元运算符时,相应的赋值运算符(如果有(也会隐式重载。例如,+=是使用 + 计算的,该 可以重载。

因此,正如您所读到的,+=被认为是x = x + y .这就是为什么不允许使+=运算符过载的原因。