ホームページ >バックエンド開発 >C++ >C# でオブジェクトの深いコピーまたは浅いコピーを作成する方法?

C# でオブジェクトの深いコピーまたは浅いコピーを作成する方法?

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

How to Create a Deep or Shallow Copy of an Object in C#?

C# でのオブジェクトの複製

次のコードは、C# における参照型 (クラス) と値型 (構造体) の動作の違いを示しています。具体的には、メモリ内の別の領域を指すオブジェクトのコピーを C# で作成するにはどうすればよいでしょうか?

C# のクラスは参照型です。つまり、クラス オブジェクトを別のオブジェクトに割り当てると、実際には同じ基になるオブジェクトに参照が割り当てられることになります。したがって、いずれかのオブジェクトに加えられた変更は両方のインスタンスに影響します。提供されたコードでは、objectA を objectB に割り当てるときに、別個のインスタンスではなく objectA のエイリアスを作成します。

オブジェクトの真のコピーを作成するには、クラスに ICloneable インターフェースを実装する必要があります。このインターフェイスは、オブジェクトの新しいインスタンスを作成する Clone() メソッドを提供します。 Clone() メソッドをオーバーライドすることで、クローン作成プロセスを制御し、コピーするフィールドとプロパティを定義できます。

提供されたコードの次のコード スニペットは、クローン作成の実装方法を示しています。

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

クラスが ICloneable を実装したら、次のコードを使用して実際のコピーを作成できます:

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

MemberwiseClone() はすべてのフィールドとプロパティの値をコピーする浅いコピーを作成しますが、ネストされたオブジェクトはコピーしないことに注意してください。ディープ コピーを作成する必要がある場合は、ネストされたオブジェクトを考慮したカスタム クローン作成プロセスを実装する必要があります。

以上がC# でオブジェクトの深いコピーまたは浅いコピーを作成する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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