1

我正在 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:这可能是一个愚蠢的问题(如果是,请提供一些教程以便我自己解决它)。

4

2 回答 2

7

引用类型的地址是按值传递的,这就是您看到这种效果的原因。您可以在传递给函数之前创建对象的深层副本

您应该看到:Jon Skeet 在 C# 中传递的参数

于 2013-03-15T09:22:38.230 回答
0

我更喜欢另一个答案,但还有另一种方法可以用来欺骗对象,使用重载的构造函数。这里描述:

http://www.codeproject.com/Articles/14686/C-Parameter-Pass-object-by-value-The-copy-construc

从那里你可以像这样通过

ChangeFooValue( new Foo(foo) );
于 2013-03-15T09:32:08.520 回答