C#中如何实现对象的深拷贝问题




深拷贝,即实现ICloneable接口.ICloneable可用于深拷贝和浅拷贝


using System;
using System.Collections.Generic;

public class MyClass
{
    class InstanceA:ICloneable
 {
  public int x;
  public InstanceB B;
  public InstanceA(){}
  public InstanceA(int X,InstanceB b)
  {
   this.x=X;
   this.B=b;
  }
  object ICloneable.Clone()
  {
   return this.Clone();
  }
  public InstanceA Clone()
  {
    InstanceA A=this.MemberwiseClone() as InstanceA;
    A.B=this.B.Copy();
   return A;   //深复制
  //  return (InstanceA)this.MemberwiseClone();  //浅复制
   //return new InstanceA(this.x,this.B);     //use this can't get deep copy too..
   
  }
 }
 class InstanceB
 {
  public int y;
  public InstanceB Copy()
  {
    return this.MemberwiseClone() as InstanceB;
  }
 }
 
 public static void Main()
 {
    InstanceA obj1=new InstanceA();
    obj1.x=1;
    obj1.B=new InstanceB();
    obj1.B.y=2;
    
  InstanceA obj2=obj1.Clone();
  obj2.x=3;
  obj2.B.y=4;
  Console.WriteLine("Obj1.x is:{0} /t obj1.B.y={1}",obj1.x,obj1.B.y);
     Console.WriteLine("Obj2.x is:{0} /t obj2.B.y={1}",obj2.x,obj2.B.y);
  Console.ReadLine();
 }
}



浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝,这样,当拷贝完毕后,源对象和拷贝对象的字段会引用同一个值。  
深拷贝是对对象实例中字段引用的对象也进行拷贝的一种方式,这样,新对象将引用新的字符串。需要注意的是,执行深拷贝后,源对象和拷贝对象不会共享任何东西,改变一个对象对另一个对象没有任何影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值