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.obj
x をobj2.obj
与え、y を与えます。どうしてこれなの?