请问;
深拷贝和浅拷贝我是这样理解的:
值类型只能进行浅拷贝 原始对象和副本共用同一对象 值也相同
引用类型可以进行深拷贝和浅拷贝 要深拷贝必须实现ICloneable接口 深拷贝后 原始对象和副本是两个不同的对象 只是它们的值相同
可以这样理解吗

解决方案 »

  1.   

    值类型只能深拷贝吧?因为本身没有引用调用,所有操作都与原对象无关.
    而深拷贝也不一定必须实现ICloneable接口,具体算法的实现与继承关系是无关的
      

  2.   

    值类型只能进行深拷贝
    应用类型的拷贝与实现ICloneable接口没有关系,你完全可以自己写一个叫Clone的方法,但是实现ICloneable接口是有意义的。
    深拷贝会把对象内部的引用类型的对象也克隆一份,浅拷贝不会
    比如你克隆一辆汽车,浅拷贝的话两量汽车会共享4个轮子,深拷贝的话就会各自拥有独立的轮子
      

  3.   

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

  4.   

     要深拷贝必须实现ICloneable接口   深拷贝后   原始对象和副本是两个不同的对象   只是它们的值相同 
    可以这样理解吗可以.
      

  5.   

    可以这样理解! 但是千万注意, ICloneable接口实现后资源占用和时间消耗都在延长, 除了必须使用大量不同类副本的自动生成情况下以外, 建议使用其它方法替代.
      

  6.   

    ICloneable.Clone 方法返回值
    作为此实例副本的新对象。备注
    Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。以上是MSDN的解释。深拷贝不一定要实现ICloneable接口。有些类型的Clone方法提供的是浅拷贝。比如Arrary,ArraryList实现的就是浅拷贝。
    如果想使用深拷贝,可以自己写一个方法。但深拷贝代价比较大。
      

  7.   

    对于实现了ICloneable接口的系统类型
    可以通过递归和反序列化(类型要继承了此接口)的方法来自己实现深拷贝

    而对于自定义类型,则通过继承ICloneable接口的Clone方法,并重写Clone方法来自己实现