一眼看懂深浅拷贝(clone)-C#
这是使用的是序列化的方式实现深拷贝
1 [Serializable] 2 class Person:ICloneable 3 { 4 /// <summary> 5 /// 字符串在clone 中类似于值类型的处理方式 6 /// </summary> 7 public string Name { get; set; } 8 9 //引用类型 clone 10 public List<int> lis = new List<int>(); 11 12 /// <summary> 13 /// 深拷贝 14 /// </summary> 15 /// <returns></returns> 16 public object Clone() 17 { 18 MemoryStream ms = new MemoryStream(); 19 BinaryFormatter format = new BinaryFormatter(); 20 format.Serialize(ms, this); 21 ms.Position = 0; 22 return format.Deserialize(ms); 23 //return base.MemberwiseClone();//浅拷贝 24 } 25 }
static void Main(string[] args) { Person p = new Person() { Name = "hello" }; Console.WriteLine(p.lis.Count);//深拷贝之前输出引用类型 0 Person p1 = (Person)p.Clone();//深拷贝 p1.lis.Add(10); Console.WriteLine(p.lis.Count);//深拷贝之后输出引用类型 0 Console.ReadKey(); }