我有一个Ascii类来帮助我管理和字符串限制,我希望能够像char一样增加它,所以我有一些运算符重载。给出以下代码:
public static AsciiWord operator++(AsciiWord aWord){
aWord.numValue++;
return aWord.Copy();
}
我真的需要副本吗?
注意:复制是我从SO复制的扩展方法,它执行几乎所有内容的深层复制。
答案 0 :(得分:4)
增量运算符应该保持原始值不变,并返回它的增量副本。但是,在您的实现中,您正在改变作为参数传入的aWord
。
,例如,下面的代码使用了post-fix increment运算符,并期望oldValue.NumValue
为0,但是对于当前的实现,它将为1。
AsciiWord aWord = new AsciiWord { NumValue = 0 };
AsciiWord oldValue = aWord++;
Assert.Equal(0, oldValue.NumValue); // fails
int i = 0;
int oldIntValue = i++;
Assert.Equal(0, oldIntValue); //passes
换句话说 - AsciiWord
应该是不可改变的。