导航

实现类的Clone方法

Posted on 2009-10-08 10:51  阳光有约  阅读(451)  评论(3编辑  收藏  举报
如果我们要为Person类实现Clone方法,我们通常会这样写:

  [Serializable]

  public class Person : ICloneable

  {

  public string name = null;

  public int age = 0;

  public object Clone()

  {

  Person person = new Person();

  person.name = name;

  person.age = age;

  return person;

  }

  }

  如果我们利用Serialization的方法,Clone函数就能写成下面的样子:

  public object Clone()

  {

  MemoryStream stream = new MemoryStream();

  BinaryFormatter formatter = new BinaryFormatter();

  formatter.Serialize(stream, this);

  stream.Position = 0;

  return formatter.Deserialize(stream);

  }

  从这两个实现上看,使用Serialization实现Clone方法似乎并没有什么好处。可是设想如果你面对的是一个复杂的类继承体系,从基类到派生类都需要实现Clone方法。利用第一种实作手法,你将不得不为每一个class写一个Clone方法,而且随着数据成员的增多,这个方法将越来越冗长,并且会由于数据成 员的改变而引发错误(我曾经遇到过好几次,由于class中增加了成员变量,而Clone方法没有及时更新,导致运行时错误。呵,这种错误还很难调试)。 现在你看到用Serialization实现的好处了吧?是的,我们只要在基类中将Clone方法声明为virtual,并用Serialization 的方法实现之,然后保证基类和派生类都可以被Serialize,上面所有的麻烦不都迎刃而解了吗?