c#运算符重载,我需要深度复制吗?

时间:2014-04-09 13:03:10

标签: c# operator-overloading deep-copy

我有一个Ascii类来帮助我管理和字符串限制,我希望能够像char一样增加它,所以我有一些运算符重载。给出以下代码:

 public static AsciiWord operator++(AsciiWord aWord){
        aWord.numValue++;
        return aWord.Copy();
    }

我真的需要副本吗?

注意:复制是我从SO复制的扩展方法,它执行几乎所有内容的深层复制。

1 个答案:

答案 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应该是不可改变的。