C# でのオブジェクトのコピー: 詳細な分析
次のコード スニペットは、2 つのオブジェクト参照 objectA
と objectB
が MyClass
クラスの同じインスタンスを指すシナリオを示しています。参照型はデータ自体を含むのではなくメモリの場所のみを参照するため、これは 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 サイトの他の関連記事を参照してください。