【.NET基础】——ShadowCopy And DeepCopy

 在介绍.NET平台下的ShadowCopy And DeepCopy之前,我们先来了解两个概念——值类型 and 引用类型。


值类型 and 引用类型





    在CLR中支持两种类型,值类型 and 引用类型。很明显从图中可以看出两者是独立出来的,在.NET层次结构中的

位置不同,那其分配内存的方式也是不同的。


引用类型:从托管堆中分配内存空间来保存它的实例,然后通过一个类似指针的变量来引用它。


值类型:轻量级变量类型,主要从线程的堆栈中分配内存空间,不需要变量来引用。


区别:


    (1)引用类型继承于System.Object类,而值类型继承于System.Object的子类System.ValueType类;


    (2)值类型有两种表现形式:拆箱和装箱。而引用类型只有装箱;


    (3)值类型不可以被继承,也不可以继承其他类型,不可以有虚方法,方法不可以被重写。而引用类型这些都可以;


    (4)引用类型初始化时Null,而值类型初始化为0;


    (5)值类型变量进行赋值时,所有成员的值都被复制,而引用类型变量赋值时,只是简单地复制指向一个对象

的引用。


    上面简单介绍了一下值类型 and 引用类型。由于值类型进行复制时,所有成员都被复制,就不在这里讨论了,


本篇博客主要介绍引用类型的ShadowCopy And DeepCopy。


ShadowCopy And DeepCopy


ShadowCopy


    简单的说ShadowCopy就是复制的一个引用地址,例如我们将文件夹的快捷方式复制到桌面上,在原文件夹里添加

文件,桌面的快捷方式文件夹里的文件也会做相应的改变。其实,两个是指向的同一个地址。如果原文件夹被销毁,

那么桌面的快捷方式也就不能打开了。也就是我们常说的“影子克隆”。


DeepCopy


    DeepCopy不仅是引用地址被拷贝出来,连同文件夹里的文件一同被拷贝,这时候拷贝出的文件夹和原文件夹是两

个不同的对象,二者之间相互独立。我们的值类型变量赋值就是运用的DeepCopy。也称“深度克隆”。


总结


  快捷方式虽好,但要慎用,还是深度克隆比较保险些。

  虽然,设计模式已经学完,但是也遗留了一些问题,有待自己好好研究,对于深浅复制理解的差不多,但是实际

写起代码来还是有一些问题的,继续加油吧!
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸运的梦之星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值