值类型和引用类型的区别

来源:互联网 发布:亚历山大汉密尔顿知乎 编辑:程序博客网 时间:2024/05/01 16:34

引用类型的数据有:class,interface,delegate,object,string,null类型,数组,datetime等。

值类型:一般的数据类型,枚举,struct等等。

两种数据类型最主要是在内存中的存储位置不同——堆和栈。

1、值类型和引用类型在内存中的存储方式:

1)值类型只需要一段单独的内存空间,存放实际的数据;数据存放在栈中。

2)引用类型需要两段内存空间,一段存放实际的数据,存放在堆中;一段存放指向数据地址的引用,存放在栈中、

2、存储引用类型对象的成员

当一个引用类型对象他含有值类型的成员时,他的成员也是存储在堆中,也就是说,对于一个引用类型的任何对象,他的所有成员对存放在堆里,不管是值类型还是引用类型。

3、值类型继承自System.ValueType,引用类型继承自System.Object

4、值类型的效率高,不需要地址转换

5、内存回收:值类型出栈及使用完后立即回收;引用类型使用完后不会立即回收,而是交给GC处理

6、类型扩展:值类型不容易扩展,所有值类型都是seal的,无法重写或继承,派生出新的值类型;而引用类型具有多态特性

0 0