概要: C#中將數據類型分為值類型(value type)和引用類型(reference type) 值類型: 值類型變數直接包含其本身的數據。在定義一個值類型變數後,將直接為該變數分配空間,可以直接賦值和使用。 列舉值類型: eg: 用變數“a”為變數“b”賦值,是將“a”所在記憶體的值複製給“b” ...
概要:
C#中將數據類型分為值類型(value type)和引用類型(reference type)
值類型:
值類型變數直接包含其本身的數據。在定義一個值類型變數後,將直接為該變數分配空間,可以直接賦值和使用。
列舉值類型:
eg:
用變數“a”為變數“b”賦值,是將“a”所在記憶體的值複製給“b”。執行 b=50之後,因為不在同一記憶體空間,所以b的值為50,a的值仍為100
引用類型:
引用類型變數本身並不包含數據,只是存儲對數據的引用,數據保存在其他位置。引用類型變數在定義時並不會分配空間,只是在對其實例化時,才真正的分配存儲空間。
eg:
使用對象“c”為“d”賦值,是將“c”對象的引用複製給了“d”,即兩個對象指向同一記憶體中的數據,因此改變c的欄位值也就改變了d的欄位值,反之亦然。因此執行c.Radius=10之後,c和d的radius值都變為10
裝箱和拆箱:
裝箱:值類型轉換為引用類型
拆箱:引用類型轉換為值類型
int a = 56; object box = a;//裝箱 int c = (int)box;//拆箱
關於值類型和引用類型的使用:
1.在C#中,string str = null 與 string str = “” 的區別
答:
string str = null :不分配記憶體空間
string str = "" :分配長度為空字元串的記憶體空間。
2.Strings = new String("xyz");創建了幾個String Object?
答:
兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。
3.dotnet中類(class)與結構(struct)的異同?
答:
Class可以被實例化,屬於引用類型,是分配在記憶體的堆上的;
Struct屬於值類型,是分配在記憶體的棧上的。