标签:
值类型与引用类型
在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实现以下浅复制。
而且引用类型占用的内存也相对较大。
[文章引用]
堆栈 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