1. 程式人生 > >C#中從記憶體空間的角度看資料型別,並延申到static方法的分析

C#中從記憶體空間的角度看資料型別,並延申到static方法的分析

資料型別這篇文章主要討論的是值型別和引用型別,值型別在定義的時候就會將該值儲存在棧中,而引用型別是分配在堆中,在堆中存放的是資料區域地址,它用來指向一塊記憶體空間。棧可以理解為儲存的都是一些資料變數,而堆中放的都是一些例項化物件。在對值型別操作時不會影響其他值,而當引用變數引用其他引用變數時,由於引用的是資料地址,所以對該引用變數的操作會改變原引用變數。例如程式:

namespace STORE
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 0;
            int y = x;
            y = 100;
            SHU shu = new SHU();
            SHU shu1 = shu;
            shu1.a = 50;
            Console.WriteLine("{0},{1}",x,y);
            Console.WriteLine("原來引用型別shu的值為:{0}",shu.a);
            Console.WriteLine("後來引用型別shu1的值為:{0}", shu1.a);
        }
    }
    class SHU
    {
        public int a = 0;
    }
}

結果是
在這裡插入圖片描述
同樣之前討論過的類和物件中對於方法的呼叫也是一樣,static定義的是靜態變數,當被定義時,就已經在記憶體中分配了空間,而非靜態變數可以理解為一個虛擬的空間,只有當被例項物件化之後,才能被產生出來,才能進行使用。