如何在不影响操作数的情况下重载按位运算符?
How to overload bitwise operator without affecting operands?
我有以下功能:
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。
我哪里出错了?
假设Hex
是一个引用类型(一个class),这一行将引用复制到内存中的同一个对象:
Hex toReturn = a;
现在 toReturn
和 a
都引用同一个对象。也就是说同一个对象可以通过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;
}
我有以下功能:
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。
我哪里出错了?
假设Hex
是一个引用类型(一个class),这一行将引用复制到内存中的同一个对象:
Hex toReturn = a;
现在 toReturn
和 a
都引用同一个对象。也就是说同一个对象可以通过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;
}