实现 clone 方法

来源:互联网 发布:积分怎么编程 编辑:程序博客网 时间:2024/05/16 13:05

因为类的实例是引用类型,要想用原有的类中的实例的数据的话,既要想创建原对象的一个副本的话,只能用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就有WidthHeight的值了 
            } 
     } 

以上是一个clone方法

MemberwiseClone()方法执行的只是浅层拷贝。而深层拷贝要递归的拷贝其字段所引用的所有对象。  
public   class   DeepClone   :   System.ICloneable  
{  
      Person   g;  
      Person   b;  
      public   Object   Clone()  
      {  
            DeepClone   dc   =   (DeepClone)this.MemberwiseClone();  
            dc.g   =   (Person)(this.g.Clone());  
            dc.b   =   (Person)(this.b.Clone());  
            return   dc;  
      }  

}

即,要在它的每一个包含的类中实现浅Clone
原创粉丝点击