zoukankan      html  css  js  c++  java
  • c#中浅拷贝和深拷贝的理解

    c#中拷贝有浅拷贝和深拷贝之分。

    例如对象A,其中有值类型字段和引用类型字段:

    1、浅拷贝:

      对于值类型字段,直接逐位复制到新拷贝的副本对象中,修改副本的字段的值,不会影响源对象中字段的值;

      对于引用类型字段,只复制字段的引用到副本对象中,引用的对象不复制,因为副本和源对象的字段引用的是同一个对象,所以修改副本对象中的字段会影响源对象。

      实现:使用Object类MemberwiseClone实现。

    2、深拷贝:

      对于值类型字段,和浅拷贝的效果一样;

      对于引用类型字段,不仅复制字段的引用到副本对象中,也复制引用的对象,所以修改副本的字段,不会影响源对象。

      实现:实现ICloneable接口。

    值类型变量的赋值操作,执行的是深拷贝操作。

    引用类型变量的赋值操作,执行的是浅拷贝操作,但是String特殊,因为String一旦创建就不可变,

    而且String类型的源码定义是:public static readonly String Empty,

    所以为String赋值是深拷贝。

    好记性不如烂笔记,以上只是为自己方便随时查看以便于记忆,如有不恰或错误之处,敬请谅解。

  • 相关阅读:
    BZOJ1087=Codevs2451=洛谷P1896&P2326互不侵犯
    poj1286
    P1066 2^k进制数
    开车旅行
    洛谷P1396 营救
    poj1840
    poj3693
    poj1195
    3955 最长严格上升子序列(加强版)
    1021 玛丽卡
  • 原文地址:https://www.cnblogs.com/qk2014/p/4841883.html
Copyright © 2011-2022 走看看