在 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
是 a
的完全独立的副本,即使 a
包含复杂的嵌套结构。 请记住使嵌套对象克隆部分适应您的特定类结构。
以上是如何在 C# 中创建自定义对象的深层副本?的详细内容。更多信息请关注PHP中文网其他相关文章!