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會存儲到棧中。
總結一下
值類型在內存中的存儲位置主要是看它是方法內的局部變量還是類的成員變量。當是方法內的局部變量時,存儲時會直接分配到棧中,而如果是類的成員變量,類本身是引用類型,引用類型是存儲在堆中,所以類的成員變量也會跟隨着存儲到堆中。
值類型作為方法中的局部變量時,在棧中分配,而作為類的成員變量時,在堆中分配;引用類型變量在棧中分配,引用類型的實例在堆中分配。