2017-09-22 60 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; 
相关问题