一眼看懂深浅拷贝(clone)

时间:2021-08-21 19:33:24

这是使用的是序列化的方式实现深拷贝

 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();
}