簡體   English   中英

C#運算符重載,我需要深度復制嗎?

[英]c# operator overloads, do i need to deep copy?

我有一個Ascii類來幫助我管理和限制char字符串,並且我希望能夠像char一樣遞增它,所以我有一些運算符重載。 給出以下代碼:

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

我真的需要副本嗎?

注意:復制是我從SO復制過來的擴展方法,它執行幾乎所有內容的深層復制。

增量運算符應該保持原始值不變,並返回其增量副本。 但是,在您的實現中,您正在變異作為參數傳入的aWord

例如,以下代碼使用oldValue.NumValue增量運算符,並希望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應該是完全不變的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM