我正在Windows Phone 8中写一段代码(c#)(与Windows 8有同样的问题)。
我想知道,如何过去一个对象的价值,而不是他的参考。
让我用一个例子解释一下:
public MyClass
{
private Foo foo //my object.
public void Init()
{
foo = new Foo();
foo.age = 5;
ChangeFooValue(foo);
}
private void ChangeFooValue(Foo temp)
{
temp.age = 10;
//I want to change temp and NOT foo.
//But at the end of this
//foo.age = 10;
//and
//temp.age = 10;
}
}
解决: 我在课堂上创建了一个深层副本:
public Foo DeepCopy()
{
Foo other = (Foo) this.MemberwiseClone();
return other;
}
ps:这可能是一个愚蠢的问题(如果是的话,请给我一些教程,以便我自己解决它。)
答案 0 :(得分:7)
引用类型的地址按值传递,这就是您看到此效果的原因。在传递给函数之前,您可以create a deep copy对象。
答案 1 :(得分:0)
我更喜欢其他答案,但是您可以使用另一种方法来使用重载构造函数来对对象进行欺骗。这里描述:
http://www.codeproject.com/Articles/14686/C-Parameter-Pass-object-by-value-The-copy-construc
从那里你可以这样过去
ChangeFooValue( new Foo(foo) );