1

MemberwiseClone()値型のビットごとのコピーを行い、参照型の参照のみをコピーする浅いコピーを作成します。参照型の独立したコピーを作成するには、ディープ コピーを作成する必要があります。これで結構です。私はこれを取得します。私の質問はSystem.Object、MemberwiseClone() が呼び出されたときに変数の反応が異なるのはなぜですか?

例えば:

Public class Test
{
    public int x;
    public object obj;

    public Test MyClone()
    {
         return (Test) this.MemberwiseClone();
    }
}

Main メソッドでこれにアクセスします。

public static void Main()
{
    Test obj1 = new obj1;
     obj1.x = 1;
     obj1.obj = "x";

    Test obj2 = obj1.MyClone();
    obj2.obj = "y" 
}

これは の値obj1.objを y に変更すべきではありませんか? obj はそのインスタンスであるためSystem.Object、明らかに参照型です。しかし、それは変わりません - obj1.objx をobj2.obj与え、y を与えます。どうしてこれなの?

4

2 に答える 2