实现 clone 方法

因为类的实例是引用类型,要想用原有的类中的实例的数据的话,既要想创建原对象的一个副本的话,只能用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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值