关于变量的高级内容(一)
值类型与引用类型
在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

浙公网安备 33010602011771号