概述
定义存储数据需要的内存大小及组成该类型的数据成员
值类型
需要单独的内存,用于存储数据。
如:int、long、float等。
由系统分配内存,在栈上
引用类型
需要两段内存
一段存储实际的数据,存在堆中
一段是一个引用,指向数据在堆中的存放位置
如:string、class
区别
范围
- C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。
- C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
内存方面
- 数组的元素不管是引用类型还是值类型,都存储在托管堆上。
- 引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
继承
- 值类型继承自ValueType(注意:而 System. ValueType 又继承自 System.Object)
- 引用类型继承自System.Object
表示
- 值类型:装箱与拆箱
- 引用类型:装箱
多态
- 值类型不具有多态
- 引用类型有多态