私は自分の答えを検索しようとしましたが、C# ではなく C に関してそれらを見つけたので、投稿することを考えました。
ここでの私の質問は些細なことかもしれません。
私の理解によると(簡単な言葉で)
コピー完了後
浅いコピー -> メイン オブジェクトとコピーされたオブジェクト (参照または値型) は、メモリ内の同じオブジェクトを指す必要があります
DeepCopy -> メイン オブジェクトとコピーされたオブジェクト (参照または値の型) は、メモリ内の異なるオブジェクトを指す必要があります
これを進めて、C# に構造があり、同じ構造の浅いコピーを作成しようとしています。「MemberwiseClone」メソッドを使用してみましたが、参照型でしか機能しないと思います。値型の場合、「MemberwiseClone」メソッドはそれをオブジェクトにボックス化し、スタック内の別のメモリアドレスにボックス化解除すると思います。
私が試したことは以下の通りです。
私の質問は、単純な構造の浅いコピーを作成するにはどうすればよいですか (可能な場合) ?
ここで私の基本が正しく、くだらない話をしていないことを願っています。私が行った声明のいずれかで私が間違っている場合は、私を修正してください。
よろしく、
サマール
struct MyStruct : ICloneable
{
public int MyProperty { get; set; }
public object Clone()
{
return this.MemberwiseClone();//boxing into object
}
}
private void btnChkStr_Click(object sender, EventArgs e)
{
MyStruct struct1 = new MyStruct();
struct1.MyProperty = 1;
//MyStruct struct2 = struct1; //This will create a deep copy
MyStruct struct2 = (MyStruct)(struct1.Clone());//unboxing into structure hence allocating a different memory address
struct2.MyProperty = 2;
MessageBox.Show(struct1.MyProperty.ToString()); //still showing 1
}