如何在不影响操作数的情况下重载按位运算符?

时间:2019-02-18 04:16:55

标签: c# overloading bitwise-operators

我具有以下功能:

    public static Hex operator&(Hex a, Hex b)
    {
        Hex toReturn = a;

        byte aByte = ConvertStringHexToByte(a._value);
        byte bByte = ConvertStringHexToByte(b._value);
        aByte &= bByte;
        toReturn._value = ConvertByteToStringHex(aByte);

        return toReturn;
    }

我没有通过引用传递值,但是似乎第一个操作数已更改?

我希望能够做到

c = a&b

无需更改a或b。

我哪里出错了?

1 个答案:

答案 0 :(得分:0)

假设Hex是引用类型(一个类),此行将引用复制到内存中的同一对象:

Hex toReturn = a;

现在toReturna都引用相同的对象。也就是说,可以使用toReturn或使用a对同一对象进行突变。

您应该创建Hex的新实例以存储结果。例如:

public static Hex operator&(Hex a, Hex b)
{
    Hex toReturn = new Hex();

    byte aByte = ConvertStringHexToByte(a._value);
    byte bByte = ConvertStringHexToByte(b._value);
    aByte &= bByte;
    toReturn._value = ConvertByteToStringHex(aByte);

    return toReturn;
}