C# 堆与栈、值类型与引用类型、可空类型
1.堆与栈
栈是一种先进后出的数据结构,是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义。栈中每个指针(当运行到那个变量时)会指向堆中的某一内存区域或说是空间。
堆(heap)就直接是内存区域了,它是为了栈的引用而开发内存的。通常内置变量就是值类型是被保存在栈中的。其他由.NET框架(Framework)提供的,或者是我们自己定义的对象即引用类型,一般被创建在堆中并将由栈中变量引用。是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
栈上存储的是:值类型,引用类型的“地址”
堆上是:引用类型的“对象”或者是引用类型的实际值,可空类型
2.值类型与引用类型
值类型:数值型 字节 布尔 结构 枚举 ,他们都继承自System.ValueType
引用类型:类 接口 委托 对象 字符串,他们都继承自System.Object
3.可空类型
在VS中敲完代码一看报错了
只需在在DateTime类型后加个?
这就是可空类型
可空类型可以表示基础类型的所有值,另外还可以表示 null 值。可空类型可通过下面两种方式中的一种声明:
1、System.Nullable<T> variable
2、T? variable
T 是可空类型的基础类型。T 可以是包括 struct 在内的任何值类型;但不能是引用类型。
以上……