//静态方法:深度克隆一个对象 public static PeoplePrototype CreateInstanceDeep() { PeoplePrototype peoplePrototype = (PeoplePrototype)_peoplePrototype.MemberwiseClone(); //深度克隆,重新实例化一个对象和开辟一个内存,所以克隆的结果指向的地址每次都不一样 peoplePrototype.Dept = new Dept() { Id = 11, Name = "技术部" }; return(peoplePrototype); }
static PeoplePrototype() { _peoplePrototype = new PeoplePrototype()//静态构造函数,赋初始值 { Id = 1, Name = "ZhangYu", Dept = new Dept { Id = 11, Name = "技术部" } }; }
static void Main(string[] args) { //Console.WriteLine("--------------------------------"); //PeoplePrototype peoplePrototype1 = PeoplePrototype.CreateInstance(); //Console.WriteLine("{0},{1}", peoplePrototype1.Name, peoplePrototype1.Id); //PeoplePrototype peoplePrototype2 = PeoplePrototype.CreateInstance(); //Console.WriteLine("{0},{1}", peoplePrototype2.Name, peoplePrototype2.Id); //peoplePrototype2.Name = "hahahahha";//修改peoplePrototype2的值,不影响peoplePrototype3的值,证明他们不是同一个引用对象 //Console.WriteLine("{0},{1}", peoplePrototype2.Name, peoplePrototype2.Id); //PeoplePrototype peoplePrototype3 = PeoplePrototype.CreateInstance(); //Console.WriteLine("{0},{1}", peoplePrototype3.Name, peoplePrototype3.Id); //Console.WriteLine("--------------------------------"); //Console.WriteLine("----------浅克隆----------------"); //PeoplePrototype peoplePrototype4 = PeoplePrototype.CreateInstance(); //Console.WriteLine("{0},{1}", peoplePrototype4.Dept.Name, peoplePrototype4.Dept.Id); //PeoplePrototype peoplePrototype5 = PeoplePrototype.CreateInstance(); //Console.WriteLine("{0},{1}", peoplePrototype5.Dept.Name, peoplePrototype5.Dept.Id); //peoplePrototype4.Dept.Id = 22; //peoplePrototype4.Dept.Name = "测试部";//修改peoplePrototype4的Dept.Name,影响peoplePrototype5的值,证明Dept同一个引用对象 //Console.WriteLine("{0},{1}", peoplePrototype4.Dept.Name, peoplePrototype4.Dept.Id); //Console.WriteLine("{0},{1}", peoplePrototype5.Dept.Name, peoplePrototype5.Dept.Id); //Console.WriteLine("--------------------------------"); //Console.WriteLine("----------深克隆----------------"); //PeoplePrototype peoplePrototype6 = PeoplePrototype.CreateInstanceDeep(); //Console.WriteLine("{0},{1}", peoplePrototype6.Dept.Name, peoplePrototype6.Dept.Id); //PeoplePrototype peoplePrototype7 = PeoplePrototype.CreateInstanceDeep(); //peoplePrototype6.Dept.Id = 22; //peoplePrototype6.Dept.Name = "测试部"; //Console.WriteLine("{0},{1}", peoplePrototype6.Dept.Name, peoplePrototype6.Dept.Id); //Console.WriteLine("{0},{1}", peoplePrototype7.Dept.Name, peoplePrototype7.Dept.Id); Console.WriteLine("----------深克隆----------------"); PeoplePrototype peoplePrototype8 = PeoplePrototype.CreateInstanceSerialize(); Console.WriteLine("{0},{1}", peoplePrototype8.Dept.Name, peoplePrototype8.Dept.Id); PeoplePrototype peoplePrototype9 = PeoplePrototype.CreateInstanceSerialize(); peoplePrototype8.Dept.Id = 22; peoplePrototype9.Dept.Name = "测试部"; Console.WriteLine("{0},{1}", peoplePrototype8.Dept.Name, peoplePrototype8.Dept.Id); Console.WriteLine("{0},{1}", peoplePrototype9.Dept.Name, peoplePrototype9.Dept.Id); Console.ReadKey(); }
//静态方法:克隆一个对象 public static PeoplePrototype CreateInstance() { PeoplePrototype peoplePrototype = (PeoplePrototype)_peoplePrototype.MemberwiseClone(); return(peoplePrototype); }