在C#中,變量分爲一下幾種類型ui
1 值類型spa
2 引用類型code
一 值類型對象
值類型是從類System.ValueType中派生。值類型的變量直接包含數據,每一個變量都有本身的數據副本,所以對一個變量執行的運算不會影響另外一個變量(ref和out參數變量除外)。blog
值類型細分爲一下類型ci
1 簡單類型字符串
有符號整型:sbyte、short、int、longstring
無符號整型:byte、ushort、uint、ulongit
Unicode字符:char編譯
IEEE二進制浮點:float、double
高精度十進制浮點數:decimal
布爾:bool
2 枚舉類型:enum
3 結構類型:struct
如需獲得一個類型或一個變量在特定平臺上的準確尺寸,能夠使用sizeof方法,表達式sizeof(type)產生以字節爲單位存儲對象或類型的存儲尺寸。
Console.WriteLine("Size of int: {0}", sizeof(int)); Console.ReadLine();
輸出結果
Size of int: 4
二 引用類型
引用類型的變量存儲對數據的引用。
多個引用類型變量能夠引用同一數據對象。所以,對一個變量執行運算會影響其它變量。
引用類型細分爲一下類型
1 object類型
object是全部類型的基類。
類型檢查在編譯時發生。
當一個值類型轉換爲對象類型時,則被稱爲裝箱;另外一方面,當一個對象類型轉換爲值類型時,則被稱爲拆箱。
object obj; obj = 100; // 裝箱 int i; i = (int)obj; // 拆箱
2 dynamic類型
能夠存儲任何類型的值在dynamic類型變量中。不能直接對其實例化。
類型檢查在運行時發生。
例如:
dynamic d = 100;
3 String類型
string類型是從object類型派生的,能夠用引號或@引號賦值。
string字符串的前面加@(「逐字字符串」)將轉義字符
例如:
string str = "C:\\Windows";
等價於
string str = @"C:\Windows";
4 用戶自定義類型
有class、interface、delegate等。
四 值類型和引用類型的區別
1 值類型在棧中存儲數據;引用類型在棧中存儲數據的地址,數據存儲在堆中。
2 賦值時,值類型複製的的是數據;引用類型複製的的是數據的地址。
3 值類型不能夠爲null;引用類型能夠爲null。
例如:
int i = 1; int i2 = i; // 複製數據 i2 = 2; Console.WriteLine(i); Console.WriteLine(i2); object obj = 10; object obj2 = obj; // 複製地址 obj2 = 20; Console.WriteLine(obj); Console.WriteLine(obj2); Console.ReadLine();
輸出結果:
1 2 20 20