码迷,mamicode.com
首页 > Web开发 > 详细

【.NET基础】——ShadowCopy And DeepCopy

时间:2015-01-17 20:52:22      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

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


总结

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

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

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

【.NET基础】——ShadowCopy And DeepCopy

标签:

原文地址:http://blog.csdn.net/luckystar689/article/details/42809033

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!