前言
我们在程序中定义的变量,实际上是存储在内存中的,内存中专门有两个位置(堆和栈)来存放变量。一般来说,值类型存在栈当中,引用类型存在堆当中。栈中存储的值类型变量在超出其作用域后,所占内存被系统释放,对重的引用类型对象则是由一个叫做GC垃圾回收器,进行内存回收。
举个例子:
Class Program//Program为一个类
Program p1=new Program();//p1就是那个引用,要放在栈中,其p1的值就要放在堆当中了
GC.Collect()//强制GC垃圾回收,系统自动调用,我们不用管,学习的时候可以自己尝试一下,更加清楚了解GC垃圾回收机制
值类型
简单类型:(Sbyte,Byte,Short,Ushort,Int,Uint,Long,Ulong,Char,Float,Double,Bool,Decimal)
枚举(enum),自定义类型
enum 枚举名
{
枚举成员
}
每个枚举成员都被赋予一个底层整数类型,默认为int
在默认情况下,编译器把第一个成员赋值为0,之后的比前面的加1
结构(struct):程序员定义的数据类型,与类非常相似。
本质上和类的区别就是,类是引用类型,而他是值类型,且是密封的,不能派生。
struct 结构名
{
}
选用类还是结构呢?从三条分析:
引用类型
类,数组,接口,委托,字符串
值类型和引用类型的区别
1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
2.值类型存取速度快,引用类型存取速度慢。
3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
4.值类型继承自System.ValueType,System.ValueType继承自System.Object,引用类型继承自System.Object
5.栈的内存分配是自动释放;而堆在.NET中会有GC来释放
6.值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。