2017-09-22 81 views
0
public class ABC 
{ 
    public int x; 
    public int y; 
} 
ABC _prevABC; 
ABC abc; 
public void A() 
{ 
    _prevABC = new ABC(); 
    _prevABC = abc; 
    abc.x = 10; 
} 
public void B() 
{ 
    abc = _prevABC; 
} 

在上述方法我稱爲A然後B,甚至然後abc.x值10,其餘在A.更新分配對象數據到另一個對象與出通過參考在c#

因此,似乎即使我創建了ABC的新對象,並用=分配了它剛傳遞的參考。

如何分配輸出傳遞引用?

+1

你需要做一個副本。基本上它看起來像你想使用一個結構,而不是一個類。 – juharr

+0

或者只是該類的深層複製/克隆。 – HimBromBeere

+1

首先,你創建一個新的ABC和**,然後把它扔在下一行**,**用'abc'引用替換**。然後,所有事情都會如你所期望的那樣:你仔細地將'_prevABC'和'abc'指向同一個對象。所以他們這樣做。如果你想要一份副本,請複製一份。你在這裏做的任何事都不做複製。您需要了解C#中引用和值類型之間的區別。 –

回答

0

_prevABC = abc行正在使您的問題,您分配引用abc到_prevABC。 如果你的類實際上只保存了一些值,例如你給了你可以使用struct,因爲它賦值而不是引用。

如果你想保留類,那麼你可以做這樣的事情:

_prevABC = new ABC(); 
_prevABC.x = abc.x; 
相關問題