1. 深拷贝与浅拷贝深拷贝,对对象整体进行拷贝包括对象的值数据和引用到的对象。浅拷贝,只拷贝对象的非静态字段,如值类型数据。如果字段为引用字段那么只拷贝引用,因此引用到的对象还是原来的对象。 // 这个标志是必须的,告诉assembly该类可以序列化 [Serializable] class Aphla { private string _name; private Beta _beta; public string Name { set { _name = value; } get { return _name; } } public string BetaName { set { _beta.Name = value; } } public Aphla(Beta b) { _beta = b; } public void Display(string objName) { Console.WriteLine("{0}, {1}", objName, _name); _beta.Display(); } // 深拷贝对象 public Aphla Clone() { Aphla a; // 创建流用于保存要被序列化的对象 MemoryStream ms = new MemoryStream(); // 创建二进制格式器,用于对序列化对象的流进行格式化 BinaryFormatter bf = new BinaryFormatter(); // 将指定的对象以创建的格式器序列到流中 bf.Serialize(ms, this); // 将流的游标置回开始点 ms.Position = 0; // 反序列化流到对象 a = (Aphla)bf.Deserialize(ms); return a; } // 浅拷贝对象 public Aphla ShallowClone() { Aphla a = (Aphla)this.MemberwiseClone(); return a; } } public class Beta { private string _name; public string Name { get { return _name; } set { _name = value; } } public void Display() { Console.WriteLine("Beta: {0}", _name); } }