【.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。也称“深度克隆”。


总结

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

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

写起代码来还是有一些问题的,继续加油吧!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。