using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace PrototypePattern
{
internal class Program
{
static void Main(string[] args)
{
PersonInfoCopy p = new PersonInfoCopy();
p.Name = "zhangsan";
p.Address = "shanghai";
p.SetWork2("1998", "上学");
PersonInfoCopy p2 =(PersonInfoCopy) p.Clone();
p2.SetWork2("2002", "上大学");
p.Display();
p2.Display();
Console.Read();
}
}
//深拷贝
public class PersonInfoCopy : ICloneable
{
public string Name { get; set; }
public string Address { get; set; }
private string timeArea;
private string content;
private WorkExperince work ;
public PersonInfoCopy()
{
work = new WorkExperince();
}
private PersonInfoCopy(WorkExperince workExperince)
{
work = (WorkExperince) workExperince.Clone();//让此类的work在内存中重新开辟一个存储空间
}
public object Clone()
{
//return this.MemberwiseClone();//方法只有这一行的话是浅拷贝
#region 深拷贝代码 由于引用类型(WorkExperince)在类(PersonInfoCopy)中不能深拷贝,所以要让WorkExperince继承
//ICloneable 接口,然后在private构造函数中copy一个WorkExperince的实例,相当于令开辟了一个地址,与原来的类的实例P的work的地址不同
PersonInfoCopy p1 = new PersonInfoCopy(work);
p1.Name = this.Name;
p1.Address=this.Address;
return p1;
#endregion
}
public void Display()
{
Console.WriteLine(Name+": "+Address);
//Console.WriteLine(timeArea+" "+content);
Console.WriteLine(work.TimeArea + " " + work.Content);
}
public void SetWork2(string time, string content)
{
this.work.TimeArea = time;
this.work.Content = content;
}
}
public class WorkExperince:ICloneable
{
public string TimeArea { get; set; }
public string Content { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
}
1.浅拷贝输出:
zhangsan: shanghai
2002 上大学
zhangsan: shanghai
2002 上大学
2.深拷贝输出:
zhangsan: shanghai
1998 上学
zhangsan: shanghai
2002 上大学
注释为个人理解
网上摘录:深拷贝浅拷贝解释
浅拷贝和深拷贝是不同的,浅拷贝虽然将原有对象复制一份,但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。而深拷贝则不同,它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_34493908/article/details/81560546