在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>(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
,并将输入对象序列化为字节数组,然后再反序列化为一个新的对象。最后输出原始对象和深拷贝后的对象的属性值。
通过这种方法可以实现深拷贝,确保新对象与原始对象完全独立,没有任何引用关系。