一、值类型和引用类型
C#中的数据类型主要分为值类型和引用类型这两种,其中指针类型只是在unsafe的上下文中才会出现。
1、值类型变量
- 值类型的变量总体有666种,分别为:整型、浮点型、字符型(
char)、布尔型(bool)、枚举型(enum)、结构体型(struct)等。 - 其中枚举型(
enum)和结构体型(struct)为两种自定义的值类型。 - 其中整型可以细分为888种,按表示数值的范围由小到大依次为:
byte,sbyte,short,ushort,int,uint,long,ulong。
- 其中浮点型可以细分为333种,按表示数值的范围由小到大依次为:
float,double,decimal。
- 值类型变量声明后,不管是否已经赋值,编译器都会为其分配内存,其存储在栈中。
2、引用类型变量
- 引用类型变量共有555种,分别为:类(
class)、字符串(string)、数组、委托(delegate)、接口类型。 - 在声明引用类型的变量时,该变量的初始值为
null。 - 引用类型变量必需要使用
new运算符显式创建对象的实例,其值存储在堆中。 - 当为该变量分配已经在其他位置使用
new创建过对象时,该引用对象的值将发生改变。 - 引用类型变量由于可以被多个对象引用,且其只是对象值的一个引用,而不是值本身,因此可能会被别的对象修改其值。
二、两种类型总结
1、区别
- 值类型存储在内存的栈中,引用类型存储在内存的堆中
- 值类型存取速度快,引用类型存取速度慢
- 值类型表示实际的数据,引用类型表示指向内存堆中的指针或者引用
- 值类型继承自
System.ValueType,引用类型继承自System.Object - 栈的内存分配自动释放;而堆在
C#中需要GC释放 - 引用类型需要两段内存:第一段存储实际数据,它位于堆中;第二段是一个引用,指向数据在堆中存放位置。

2、注意
C#中bool类型不能转换成int

被折叠的 条评论
为什么被折叠?



