.NET 數(shù)據(jù)類型概述
任何一門開(kāi)發(fā)語(yǔ)言都需要數(shù)據(jù)類型作為其基礎(chǔ)根本,就如同自然語(yǔ)言中的文字一般,所以想要掌握一門開(kāi)發(fā)語(yǔ)言就要先了解其中的數(shù)據(jù)類型,接下來(lái)我就談?wù)勎覍?duì).NET的數(shù)據(jù)類型的了解(開(kāi)發(fā)語(yǔ)言以C#為主)。
數(shù)據(jù)類型
在C#中數(shù)據(jù)類型主要可以分為值類型、引用類型和指針類型,以下是一個(gè)數(shù)據(jù)類型的歸類表:
- ValueType
- 數(shù)值數(shù)據(jù)
- 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
- 關(guān)鍵字:bool
- 值范圍:True或False
- Char
- 關(guān)鍵字:char
- 值范圍:一個(gè)Unicode字符,存儲(chǔ)0~65535之間的整數(shù)
- DateTime和TimeSpan
- Numerics
- 結(jié)構(gòu):BigInteger
- 枚舉
- 底層存儲(chǔ):byte、short、int(默認(rèn))、long
- 結(jié)構(gòu)
- 數(shù)值數(shù)據(jù)
- 引用類型
- Class 類
- Interface 接口
- Dynamic
- Object 超級(jí)父類
- String 字符串
- Delegate 委托
- Array 數(shù)組
- 指針類型
數(shù)據(jù)類型默認(rèn)值
- 數(shù)值數(shù)據(jù):0
- Boolean:false
- Char:?jiǎn)蝹€(gè)空字符
- DateTime和TimeSpan:1/1/0001 12:00:00 AM
- Numerics:0
- 引用類型:null
可空類型
用于表示沒(méi)有值的數(shù)值數(shù)據(jù),在實(shí)際類型的值上加上null,這種語(yǔ)法只對(duì)值類型是合法的,語(yǔ)法是只要在值類型關(guān)鍵字上加?后綴。例如:int? nullableInt = 0;
內(nèi)存分配
值類型的變量是分配在棧上,當(dāng)變量離開(kāi)定義域范圍就會(huì)被內(nèi)存移除。
引用類型變量則是分配在堆上進(jìn)行托管,有垃圾回收機(jī)制控制。
- 淺復(fù)制
當(dāng)ValueType中包含引用類型時(shí),生成2個(gè)獨(dú)立的ValueType的值,但其中的引用類型將生成一個(gè)引用的副本,即指向內(nèi)存中的同一個(gè)對(duì)象的引用,改變其中一個(gè)的值,另一個(gè)也會(huì)隨之改變。
- 深復(fù)制
賦值操作
值類型賦值是復(fù)制一份副本,2個(gè)變量是獨(dú)立操作的。
引用類型賦值是2個(gè)變量是指向托管堆中的同一個(gè)對(duì)象,改變其中一個(gè)變量的值,另一個(gè)也會(huì)改變。
值類型中包含引用類型時(shí)賦值是默認(rèn)為淺復(fù)制。
傳遞
- 值類型
- 按值傳遞
傳遞變量的一個(gè)數(shù)據(jù)副本。
- 引用類型
- 按值傳遞 復(fù)制了指向調(diào)用者對(duì)象的引用,可以改變對(duì)象的狀態(tài)數(shù)據(jù),但是不能引用重新賦值一個(gè)新對(duì)象
- 按引用傳遞 可以改變對(duì)象的狀態(tài)數(shù)據(jù),也可以改變引用在內(nèi)存中的指向,把引用重新賦值一個(gè)新的對(duì)象
- 隱式轉(zhuǎn)換
- 寬化
隱式向上轉(zhuǎn)換,從值范圍小的類型向值范圍大的類型轉(zhuǎn)換,不會(huì)丟失數(shù)據(jù)。
- 顯示轉(zhuǎn)換
- 強(qiáng)制類型轉(zhuǎn)換
- 窄化
- 溢出檢測(cè)(默認(rèn)不檢測(cè))
- 代碼級(jí)檢測(cè)
- unchecked
-
checked
- 項(xiàng)目級(jí)檢測(cè)
- VS->項(xiàng)目屬性->生成->高級(jí)->檢測(cè)運(yùn)算上下溢
- 代碼級(jí)檢測(cè)
- Convert命令
可進(jìn)行顯示的寬化、窄化、字符串解析數(shù)值等操作
- 自定義類型轉(zhuǎn)換
使用關(guān)鍵字explicit和implicit自定義類型轉(zhuǎn)換。implicit隱式轉(zhuǎn)換運(yùn)算符更容易使用,但是如果您希望運(yùn)算符的用戶能夠意識(shí)到正在進(jìn)行轉(zhuǎn)換,則顯式運(yùn)算符很有用。