4、C#类型系统—浅拷贝和深拷贝

C#类型系统—浅拷贝和深拷贝

1   浅拷贝

        浅拷贝指拷贝一个对象时,仅仅拷贝对象的引用,但是拷贝对象和原对象还是引用同一份实体。此时,一个对象的改变都会影响到另一个对象。

        所谓的浅拷贝,是指拷贝一个对象的时候,拷贝原始对象中所有的非静态值类型成员和所有的引用类型成员的引用。换言之,新的对象和原始对象将共享所有引用类型成员的实际对象。

        浅拷贝实现:调用MemberwiseClone方法。

2   深拷贝

        拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。这样进行深拷贝后的副本对象就和源对象互相独立。即深拷贝不仅复制所有的非静态值类型成员,而且也复制所有引用类型成员的实际对象

        深拷贝实现:

                ①依照官方文档,实现默认的复制构造函数。即显式的增加一个带有类引用的构造函数来创建一个新对象。

                ②标准做法,实现ICloneable接口,在clone方法中实现深拷贝(当然也可以实现浅拷贝)。

                ③利用反射实现深拷贝(拷贝的类无互相引用)。

                ④利用序列化和反序列化实现(分为xml序列化、二进制序列化、json)。

                ⑤表达式树实现。表达式树比反射快,反射比序列化快。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值