在C#中实现深拷贝的方法有很多种,以下是其中一种方法:
- 使用序列化和反序列化:将对象序列化为字节数组,然后再将字节数组反序列化为一个新的对象。这样可以创建一个完全独立的对象,与原始对象没有任何关联。
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public class MyClass { public int MyProperty { get; set; } } public class DeepCopyExample { public static T DeepCopy(T obj) { using (MemoryStream stream = new MemoryStream()) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); stream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(stream); } } public static void Main() { MyClass originalObject = new MyClass { MyProperty = 42 }; MyClass copiedObject = DeepCopy(originalObject); Console.WriteLine($"Original Object: {originalObject.MyProperty}"); Console.WriteLine($"Copied Object: {copiedObject.MyProperty}"); } }
在上面的代码中,DeepCopy
方法接受一个泛型参数T
,并将输入对象序列化为字节数组,然后再反序列化为一个新的对象。最后输出原始对象和深拷贝后的对象的属性值。
通过这种方法可以实现深拷贝,确保新对象与原始对象完全独立,没有任何引用关系。