此文章可结合值类型一起了解: 值类型.
c#支持哪几种引用类型?
引用类型是指由类型的实际值引用表示的数据类型。
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
简单的说,它们指的是一个内存位置,类似于指针。
内置的 引用类型有:object、dynamic 和 string。
引用类型的一些特点
引用类型分配在托管堆上。
引用类型直接继承自System.Object。
引用类型的默认值为null。
我们由int[] arr = new int[]来理解是怎样为引用类型分配内存的。
主函数先进栈,在栈中定义一个变量arr。此时并未在堆上开辟内存,只在栈上有一小块儿内存用于储存一个地址。
接下来为arr赋值,但是右边不是一个具体值,是一个实体。这时便在堆中开辟了一块儿内存用于储存实体(分配的地址和初始化的值),
此时通过=将堆中的内存地址赋值给变量,因此引用类型储存的为变量的地址。
堆和栈的一些区别和理解
堆是由new分配内存。
栈由系统自动分配,如声明在函数中一个局部变量 int a; 系统自动在栈中为a开辟空间。
栈空间比较小,但是读取速度快。
堆空间比较大,但是读取速度慢。
栈先进先出,堆可以任意进出。