结构体的浅复制和深复制

浅复制,指在创建一个对象或结构的副本时,对其值类型字段直接复制值,引用类型字段只复制引用(地址)。

深复制,与浅复制不同的是,对引用类型字段,会创建新的引用,使用新的引用(地址)。

 

通常直接赋值操作是浅复制操作,若使用深复制,应该实现ICloneable操作,写Clone方法,利用Object.MemberwiseClone方法浅复制后,需要手动编写对其引用对象进行创建新的对象深复制副本。

 

结构体也是如此,虽然是值类型,若其中包含引用类型字段,想产生一个深复制版本,必须手动实现。

下面是一个测试结构体浅复制的代码:

 

 

显示结果:

 

测试代码中前三个TEST,使s2=s1操作后,s2得到了s1的一个浅复制版本。

TEST 4利用System.Linq提供的扩展方法ToArray创建了数组的一个副本,

使s2是s1的深复制版本,所以演示中对s2的任何修改不会影响s1。

注意:使用ToArray方法,根据情况,增加源数据对象是否为null的判断。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值