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

C# でオブジェクトの真のコピーを作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 12:35:42395ブラウズ

How Can I Create a True Copy of an Object in C#?

C# でのオブジェクトのコピー: 詳細な分析

次のコード スニペットは、2 つのオブジェクト参照 objectAobjectBMyClass クラスの同じインスタンスを指すシナリオを示しています。参照型はデータ自体を含むのではなくメモリの場所のみを参照するため、これは C# の参照型の一般的な動作です。ただし、場合によっては、異なるメモリ アドレスを指す、オブジェクトの完全に独立したコピーを作成する必要があります。

浅いコピーには ICloneable を使用します

浅いコピー (元のオブジェクトの非参照型メンバーの状態のみをコピー) を実装するために、C# は ICloneable インターフェイスを提供します。このインターフェイスを実装すると、クラスでカスタムのクローン作成動作を定義できるようになります。

<code class="language-csharp">class myClass : ICloneable
{
    public String test;
    public object Clone()
    {
        return this.MemberwiseClone();
    }
}</code>

MemberwiseClone メソッドはオブジェクトの浅いコピーを実行し、すべての非参照型メンバーの値をコピーします。 ICloneable を実装し、その MemberwiseClone メソッドを Clone でオーバーライドすることで、 MyClass クラスのカスタム クローン作成メカニズムを作成します。

独立したオブジェクトを作成する

MyClass のスタンドアロン インスタンスを作成するには、Clone メソッドを使用します。

<code class="language-csharp">myClass a = new myClass();
myClass b = (myClass)a.Clone();</code>

これにより、 objectB は、 MyClass とは異なるメモリ アドレスを持つ objectA の新しいインスタンスを参照します。ただし、これは浅いコピーであることに注意することが重要です。これは、オブジェクト内の参照型メンバーが依然として元のオブジェクトと同じメモリ位置を指していることを意味します。ディープ コピーを実装するには、通常、参照型のメンバーをさらにコピーする必要があります。

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

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