.NET中的深拷贝和浅拷贝是指对象复制的方式。浅拷贝只复制对象的引用,而不复制对象本身,因此两个对象会共享同一个引用。深拷贝则是复制对象本身,而不是复制对象的引用,因此两个对象是完全独立的。
在.NET中,可以通过实现ICloneable接口来实现对象的浅拷贝。
ICloneable接口定义了一个Clone方法,该方法返回一个与当前对象相同的新对象。默认情况下,Clone方法执行的是浅拷贝。如果需要实现对象的深拷贝,可以使用序列化和反序列化的方式。例如,可以使用BinaryFormatter类将对象序列化为二进制数据,然后再使用MemoryStream和BinaryFormatter类将二进制数据反序列化为新的对象。这样可以实现对象的深拷贝。
以下是一个示例代码,演示了如何使用序列化和反序列化的方式实现对象的深拷贝:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; class Program { static void Main(string[] args) { Person person1 = new Person { Name = "张三", Age = 18 }; Person person2 = DeepClone(person1); Console.WriteLine(person1 == person2); // 输出 False } static T DeepClone<T>(T obj) { using (MemoryStream stream = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); stream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(stream); } } } [Serializable] class Person { public string Name { get; set; } public int Age { get; set; } }
标签:C#,对象,using,BinaryFormatter,拷贝,序列化,NET From: https://www.cnblogs.com/yellow3gold/p/17248208.html