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 サイトの他の関連記事を参照してください。