2017-01-08 77 views
0

這可能看起來很愚蠢,所以請原諒我的天真。防止重複對象互相影響C#

如果我有一個整數,說int counter = 2;然後我可以創建整數int anotherCounter = counter;如果我是打印的anotherCounter價值,這顯然返回2.

現在,如果我接着說anotherCounter = 5;那麼這將不更改我們的第一個值counter的值。同樣,如果我將counter的值更改爲counter = 10;,那麼這不會影響anotherCounter

不過,我已經創建了我已經習慣了instantate某些對象的一類,但如果我做什麼,我只是描述我的對象,他們似乎都共享相同的價值觀:

HSVImage initial = new HSVImage(1920, 1080); 
HSVImage duplicate = initial; 

對於某種原因,如果我現在改變duplicate中的任何內容,那麼它也會影響intial。有人能解釋我出錯的地方嗎?我認爲這是關於如何設置我的HSVImage類的?

謝謝。 山姆

+0

除了下面的答案,如果您希望實現類似HSVImage類的行爲,因爲它的值類型,請考慮將其從類更改爲值類型的結構。 –

回答

1

這是因爲對象是通過並經參考不像正在價值通過原語複製。

當你寫

HSVImage initial = new HSVImage(1920, 1080); 
HSVImage duplicate = initial; 

你將參考複製到initialduplicate這意味着initial現在在同一個對象duplicate

,另一方面指向,當你寫

int counter = 2; 
int other = counter; 

你會將地方counter裏面other

你可以閱讀更多關於它在這裏:https://msdn.microsoft.com/en-us/library/0f66670z.aspx

+0

嗨,謝謝你!我明白你的意思,但我仍然不知道如何解決我的問題。我如何去做我的重複值而不是參考?在文檔中它說我不得不在參數中加入'ref',但我沒有,所以它爲什麼認爲它是一個參考? –

+0

您可以使用** Copy構造函數** 'HSVImage initial = new HSVImage(1920,1080); HSVImage duplicate = new HSVImage(initial);' 這將創建一個與第一個對象具有相同屬性的新對象。 – gkpln3

+0

啊對,非常感謝你! –