任何一門開發語言都需要數據類型作為其基礎根本,就如同自然語言中的文字一般,所以想要掌握一門開發語言就要先了解其中的數據類型,接下來我就談談我對.NET的數據類型的了解(開發語言以C#為主)。
數據類型
在C#中數據類型主要可以分為值類型、引用類型和指針類型,以下是一個數據類型的歸類表:
- ValueType
- 數值數據
-
- sbyte:-128~127
- byte:0~255
- short:-32768~32767
- ushort:0~65535
- int:-2147483648~2147483647
- uint:0~4294967295
- long:-9223372036854775808~9223372036854775807
- ulong:0~18446744073709551615
- float:1.5*10^-45~3.4*10^38
- double:5*10^-324~1.7*10^308
- decimal:1*10^-28~7.9*10^2
-
- Boolean
-
- 關鍵字:bool
- 值范圍:True或False
-
- Char
-
- 關鍵字:char
- 值范圍:一個Unicode字符,存儲0~65535之間的整數
-
- DateTime和TimeSpan
-
- Numerics
-
- 結構:BigInteger
-
- 枚舉
- 底層存儲:byte、short、int(默認)、long
- 結構
- 枚舉
- 引用類型
-
- Class 類
- Interface 接口
- Dynamic
- Object 超級父類
- String 字符串
- Delegate 委托
-
- Array 數組
- 指針類型
數據類型默認值
- 數值數據:0
- Boolean:false
- Char:單個空字符
- DateTime和TimeSpan:1/1/0001 12:00:00 AM
- Numerics:0
- 引用類型:null
可空類型
用於表示沒有值的數值數據,在實際類型的值上加上null,這種語法只對值類型是合法的,語法是只要在值類型關鍵字上加?后綴。例如:
int? nullableInt = 0;
內存分配
值類型的變量是分配在棧上,當變量離開定義域范圍就會被內存移除。
引用類型變量則是分配在堆上進行托管,有垃圾回收機制控制。
復制
- 淺復制
- 深復制
賦值操作
值類型賦值是
復制一份副本,2個變量是獨立操作的。
引用類型賦值是
2個變量是指向托管堆中的同一個對象,改變其中一個變量的值,另一個也會改變。
值類型中包含引用類型時賦值是默認為淺復制。
傳遞
- 值類型
-
- 按值傳遞
- 引用類型
-
- 按值傳遞
-
- 按引用傳遞
類型轉換
- 隱式轉換
-
- 寬化
- 顯示轉換
-
- 強制類型轉換
-
- 窄化
-
-
- 溢出檢測(默認不檢測)
-
- 代碼級檢測
-
- unchecked
-
checked
- 項目級檢測
-
- VS->項目屬性->生成->高級->檢測運算上下溢
-
- Convert命令
- 自定義類型轉換
使用關鍵字explicit和implicit自定義類型轉換。implicit隱式轉換運算符更容易使用,但是如果您希望運算符的用戶能夠意識到正在進行轉換,則顯式運算符很有用。