C#中数据类型一般分为值类型和引用类型
值类型包括:整型,浮点,布尔值,枚举等。
引用类型:类,string,接口,数组,委托等。
我们的电脑内存一般分为 堆和栈两个区域。
声明的值类型和引用类型本身一般都是在栈中存储。引用类型声明的类时在堆中存储。
例如:
public class Person { int age=0; public int GetAge() { int b=age; return b; } } public void Test() { int num=0; Person rose =new Person(); rose.GetAge(); }
age值类型作为类的成员变量时,会分配到堆中存储。
num本身是值类型,值类型作为方法内局部变量时,分配到栈中存储。
rose本身是在栈中存储,rose所指向的类person,是在堆中存储。
在Test方法内调用GetAge方法,b会存储到栈中。
总结一下
值类型在内存中的存储位置主要是看它是方法内的局部变量还是类的成员变量。当是方法内的局部变量时,存储时会直接分配到栈中,而如果是类的成员变量,类本身是引用类型,引用类型是存储在堆中,所以类的成员变量也会跟随着存储到堆中。
值类型作为方法中的局部变量时,在栈中分配,而作为类的成员变量时,在堆中分配;引用类型变量在栈中分配,引用类型的实例在堆中分配。