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

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

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

    1、浅拷贝:

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

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

      实现:使用Object类MemberwiseClone实现。

    2、深拷贝:

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

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

      实现:实现ICloneable接口。

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

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

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

    所以为String赋值是深拷贝。

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

  • 相关阅读:
    契约测试SpringCloud Contract入门
    CircuitBreaker 组件 resilience4j
    阿里开源的15个顶级Java项目
    将军令:数据安全平台建设实践
    ResNet
    设计模式
    muduo评测摘要
    muduo 学习
    RAII
    大数据框架
  • 原文地址:https://www.cnblogs.com/qk2014/p/4841883.html
Copyright © 2011-2022 走看看