1

私はWindowsPhone8でコード(c#)を書いています(Windows 8でも同じ問題がありました)。

そして、私は、彼の参照ではなく、1つのオブジェクトの値をどのように渡すのか疑問に思っています。

1つの例で説明しましょう:

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 に答える