C# でのカスタム オブジェクトのディープ コピー
この記事では、参照型と値型の区別と、カスタム オブジェクトの真のディープ コピーを実現する方法に焦点を当てて、C# でのオブジェクトのクローン作成について説明します。 例を使用して、割り当てられたときの MyClass
(参照型) と myStruct
(値型) の両方の動作を説明します。 予想どおり、参照型インスタンスへの変更は、同じメモリ位置を共有している他の参照にも反映されます。ただし、値型は独立したコピーを作成します。
カスタム オブジェクトの本物のコピーを作成するには、ICloneable
インターフェイスを実装します。これには、同じプロパティ値を持つ新しいインスタンスを生成する Clone
メソッドを定義する必要があります。
ディープコピー用の ICloneable
の実装
次のコードは、ディープ コピーの ICloneable
を実装し、ネストされたオブジェクトを処理する方法を示しています。
<code class="language-csharp">class MyClass : ICloneable { public string test; public object Clone() { MyClass newObj = (MyClass)this.MemberwiseClone(); // Shallow copy first // Handle nested objects for a deep copy (example) // if (this.nestedObject != null) // { // newObj.nestedObject = (NestedObjectType)this.nestedObject.Clone(); // } return newObj; } }</code>
MemberwiseClone()
は浅いコピーを作成します。 ディープ コピーを作成するには、コメントされた例に示すように、Clone
メソッド内でネストされたオブジェクトを明示的にクローンする必要があります。 ネストされたオブジェクトにもネストされたオブジェクトが含まれている場合、これには再帰的なクローン作成が必要です。
Clone
メソッドを使用したディープ コピーの作成:
<code class="language-csharp">MyClass a = new MyClass(); MyClass b = (MyClass)a.Clone();</code>
これにより、b
に複雑な入れ子構造が含まれている場合でも、a
が a
の完全に独立したコピーであることが保証されます。 ネストされたオブジェクトのクローン作成セクションを特定のクラス構造に合わせて調整することを忘れないでください。
以上がC# でカスタム オブジェクトのディープ コピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。