C#的深拷贝和浅拷贝

项目场景:

我们在写代码的时候经常会出现一种情况:你改变了一个变量的值,但是另一个变量的值也跟着改变了,而有时候不会。


解释

这时候有产生了一个问题,他什么时候会改变,什么时候不会改变。

这时候就引入了两个概念:

深拷贝:深拷贝就是你的数据和内存地址都拷贝一份。举个例子:比如说你现在需要去打印一个身份证复印件,但是你没有直接去打印,而是去让别人做了一个和你身份证一模一样的身份证去打印的,这就是深拷贝啦

浅拷贝:浅拷贝就是只是给数据拷贝一份,内存地址并没有拷贝,所以用的同一块内存。举个例子:比如你还是要身份证复印件,你直接拿原本的身份证去打印了,这就是浅拷贝

他们两个的区别是,一个去做了一个身份证,一个没有做。这时候你需要更改身份证上的东西,深拷贝就会改变他做出来的模型,而浅拷贝则直接就用了原有的身份证,你再用你的身份证去打印的时候,就会发现,打印出来的是改变后的样子

一般的情况来说 , 值类型都是浅拷贝,引用类型为深拷贝

但是这就引出一种情况 , 结构体中的引用类型,下面是测试

 我在结构体里测试了两种引用类型  字符串和数组

数组只要不去new 直接改变数组中的某一个值,他是浅拷贝,new的话大家应该知道会在内存中开辟内存,所以就是浅拷贝了

但是string这个就有点意思

 他相当于是一个常量,和数组一样为固定长度,你改变字符串他就重新创建一个,虽然说string不能去new但是他相当于有一个隐式去new的过程。

OK,结束,再见

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值