我具有以下功能:
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。
我哪里出错了?
答案 0 :(得分:0)
假设Hex
是引用类型(一个类),此行将引用复制到内存中的同一对象:
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;
}