1、浅拷贝与深拷贝的定义
  什么是拷贝?拷贝即为常说的复制或者克隆一个对象,并且通过拷贝这些源对象创建新的对象。其中拷贝分为浅拷贝和深拷贝。对于拷贝出来的对象,在使用上有很大的差异,特别是在引用类型上。
  浅拷贝:将对象中的所有字段复制到新的对象中。其中,值类型字段被复制到新对象中后,在新对象中的修改不会影响到原先对象的值。而新对象的引用类型则是原先对象引用类型的引用,不是引用自己对象本身。注:在新对象中修改引用类型的值会影响到原先对象;理论上String也是引用类型,但是由于由于该类型比较特殊,Object.MemberwiseClone()方法依旧为其新对象开辟了新的内存空间存储String的值,在浅拷贝中把String类型当作'值类型'即可。
   深拷贝:同样也是拷贝,但是与浅拷贝不同的是,深拷贝会对引用类型重新在创新一次(包括值类型),在新对象做的任何修改都不会影响到源对象本身。
   
2、实现浅拷贝与深拷贝
   在 .Net平台开发中,要实现拷贝,微软官方建议继承ICloneable接口,该接口位于
  //Equal探索        static void Main()         {             //创建源对象            Teacher Source = new Teacher("Fode",18,DateTime.Now,22);             Source.Print("源对象");              //浅拷贝对象            Teacher Target = Source.Clone() as Teacher;             /*              理论上String也是引用类型,但是由于由于该类型比较特殊,              Object.MemberwiseClone()方法依旧为其新对象开辟了新的内存空间存储String的值,              在浅拷贝中把String类型当作'值类型'即可              */             Target.Name = "JJ";             Target.Student.Count = 11;             Console.WriteLine("新对象的引用类型的值发生变化");              Target.Print("新对象");             Source.Print("源对象");              Console.ReadKey();         }          class Teacher : ICloneable         {             public Teacher(String name, Int32 age, DateTime birthday, Int32 count)             {                 this._name = name;                 this._age = age;                 this._birthday = birthday;                 this.Student = new Student() { Count = count };             }              private Int32 _age;             public Int32 Age { get { return _age; } set { _age = value; } }              private String _name;             public String Name { get { return _name; } set { _name = value; } }               private DateTime _birthday;             public DateTime Birthday { get { return _birthday; } set { _birthday = value; } }               public Student Student { get; set; }             public void Print(String title)             {                 Console.WriteLine(title);                 Console.WriteLine($"基本信息:姓名:{this.Name},年龄:{this.Age},生日:{this.Birthday.ToString("D")}");                 Console.WriteLine($"引用类型的值{Student.ToString()}");                 Console.WriteLine();             }              //
                        关键字: