如何在C#中实现Clone方法

2024-11-28 15:04:22
推荐回答(1个)
回答1:

因为类的实例是引用类型,要想用原有的类中的实例的数据的话,既要想创建原对象的一个副本的话,只能用clone方法。 Clone方法分为深clone和浅clone 在C#中提供了浅clone的方法,即汪扒为MemberwiseClone() C#浅Clone的例子:using System; namespace DesignPattern {public class ToolbarButton : ICloneable //实现Clone接口{private int _Width; private int _Height; public ToolbarButton(){ }public int Width{get{return _Width;}set{_Width=value;}}public int Height{get{return _Height;}set{_Height=value;}}public object Clone(){return this.MemberwiseClone(); //返回浅clone方法¨}}public class Test{public void TestMethod(){ToolbarButton mtb_NewButton=new ToolbarButton(); mtb_NewButton.Width=60; mtb_NewButton.Height=30; ToolbarButton mtb_SaveButton=new ToolbarButton(); mtb_SaveButton=(ToolbarButton)mtb_NewButton.Clone(); //这时mtb_SaveButton就有Width和Height的值了}}} 以上是一个浅clone方法MemberwiseClone()方法执行的只是浅层拷贝。而深层拷贝要递归的拷贝其字段所引用的所有对象。 public class DeepClone : System.ICloneable{Person g;Person b;public Object Clone(){DeepClone dc = (DeepClone)this.MemberwiseClone(); dc.b = (Person)(this.b.Clone());return dc;} }即,要在它蠢老的每一带陵升个包含的类中实现浅Clone