ホームページ >バックエンド開発 >C++ >C# でカスタム オブジェクトのディープ コピーを作成するにはどうすればよいですか?

C# でカスタム オブジェクトのディープ コピーを作成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-13 12:22:43112ブラウズ

How Can I Create a Deep Copy of a Custom Object in C#?

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 に複雑な入れ子構造が含まれている場合でも、aa の完全に独立したコピーであることが保証されます。 ネストされたオブジェクトのクローン作成セクションを特定のクラス構造に合わせて調整することを忘れないでください。

以上がC# でカスタム オブジェクトのディープ コピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。