码迷,mamicode.com
首页 > 其他好文 > 详细

关于变量的高级内容(一)

时间:2016-08-01 19:15:37      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

值类型与引用类型

 

在C#里面只存在两种变量类型,一种是值类型另一种是引用类型。

C#的值类型包括了结构体和枚举,而引用类型则是指类。

也就是说除了object、类、枚举、结构体之外C#没有其他的数据类型了。

至于值类型与引用类型的区别,我要好好说明一下,两个值类型在进行赋值操作的时候,系统将会将他们的值赋值:

也就是说

//在下面的操作当中,i的值将会完整的复制到b中
int
i=10; int b=i;

而引用类型,只能进行引用

//假设我定义了一个类cls
//下面进行类初始化
cls A = new cls("asd");
//在声明一个cls类
cls B = A;

在这个操作当中,A不会进行复制操作,而是B直接引用了A这个对象,在内存也就仅仅告诉系统,B是A的别名而已,举个例子:神舟电脑实际上是蓝天代工的,只不过是贴个牌子。也许比较难理解,但是我们会在以后慢慢强调。

上面说的引用类型与值类型在赋值的时候会进行怎样的操作,下面就要说说这两者在内存中的区别。

由于值类型是在内存栈(Stack)中,使用的是一级缓存,所以值类型的读取以及复制都非常的快,而引用类型使用的则是堆(Heap),所用到的缓存也只是二级缓存读取速度相对慢得许多,因此在处理类的时候我们一般不推荐深度复制(也就是将整个实例的复制),深度复制实际上也比较难写。最多只是使用ICloneable实现以下浅复制。

而且引用类型占用的内存也相对较大。

 

[文章引用]

C#实例复制和深度复制的实现

堆栈     http://baike.baidu.com/link?url=lF2G9KQZMnwAqaxG1F_wbxnhc5mLG9Wt4A9m-Ac0SnfyhJntNIjdBzXqO4vLKDibUxzXujJUARy4SLiuX9BtVa

C#对象的浅拷贝与深拷贝     http://www.cnblogs.com/lidabo/archive/2012/03/12/2392304.html

关于变量的高级内容(一)

标签:

原文地址:http://www.cnblogs.com/Danfish/p/CSharp_lesson1_Variant_senior1.html

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