天天看點

C#中引用類型和值類型

C#的值類型包括:結構體(數值類型,bool型,使用者定義的結構體),枚舉,可空類型。

C#的引用類型包括:數組,使用者定義的類、接口、委托,object,字元串。

C#的值類型包括:結構體(數值類型,bool型,使用者定義的結構體),枚舉,可空類型。

 C#的引用類型包括:數組,使用者定義的類、接口、委托,object,字元串。      

  值類型和引用類型的差別在于,值類型的變量直接存放實際的資料,而引用類型的變量存放的則是資料的位址,即對象的引用。

  值類型變量直接把變量的值儲存在堆棧中,引用類型的變量把實際資料的位址儲存在堆棧中,而實際資料則儲存在堆中。注意,堆和堆棧是兩個不同的概念,在記憶體中的存儲位置也不相同,堆一般用于存儲可變長度的資料,如字元串類型;而堆棧則用于存儲固定長度的資料,如整型類型的資料int(每個int變量占用四個位元組)。由資料存儲的位置可以得知,當把一個值變量賦給另一個值變量時,會在堆棧中儲存兩個完全相同的值;而把一個引用變量賦給另一個引用變量,則會在堆棧中儲存對同一個堆位置的兩個引用,即在堆棧中儲存的是同一個堆的位址。在進行資料操作時,對于值類型,由于每個變量都有自己的值,是以對一個變量的操作不會影響到其它變量;對于引用類型的變量,對一個變量的資料進行操作就是對這個變量在堆中的資料進行操作,如果兩個引用類型的變量引用同一個對象,實際含義就是它們在堆棧中儲存的堆的位址相同,是以對一個變量的操作就會影響到引用同一個對象的另一個變量。