一眼看懂深浅拷贝(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();
        }

 

posted @ 2016-08-25 17:42  Young汨  阅读(513)  评论(0编辑  收藏  举报