c#入門之類型轉(zhuǎn)換詳解
“無論是什么類型,所有的數(shù)據(jù)都是一系列的位,即一系列0和1。變量的含義是通過解釋這些數(shù)據(jù)的方式來傳達(dá)的?!薄@句原話是書上翻譯的,不過后一句話總感覺理解起來不是很通俗,自己覺得這樣理解可能會合適些:無論什么類型的數(shù)據(jù),在計算機存儲時都是0和1,而變量的意義,就是以不同的方式來解釋這些數(shù)據(jù),以達(dá)到滿足程序應(yīng)用、節(jié)約內(nèi)存等需求。
換句話說:變量存在的意義,就是建立規(guī)(標(biāo))范(準(zhǔn))的數(shù)據(jù)存儲方式。
隱式轉(zhuǎn)換
類型轉(zhuǎn)換分兩種形式:隱式轉(zhuǎn)換、顯示轉(zhuǎn)換。
隱式轉(zhuǎn)換不需要單獨的表達(dá)式,只需要把滿足隱式轉(zhuǎn)換條件的兩個變量做相應(yīng)的表達(dá)式操作即可,但隱式轉(zhuǎn)換的結(jié)果可能并不是自己意料之中的:
ushort destinationVar;
char sourceVar = 'a';
destinationVar = sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);
上面的輸出結(jié)果,sourceVar的是a,而destinationVar雖然=sourceVar,但輸出的結(jié)果是97??梢钥闯?,雖然兩種數(shù)據(jù)類型滿足隱式轉(zhuǎn)換的條件(存儲的值范圍),但不同的表達(dá)類型決定了最終的結(jié)果也不一樣。另外,和大多數(shù)編程一樣,隱式轉(zhuǎn)換時,只要類型A的取值范圍比類型B的范圍小,就可以隱藏轉(zhuǎn)換為B。
顯示轉(zhuǎn)換
在顯示轉(zhuǎn)換中,可以使用強制轉(zhuǎn)換和Convert。
強制轉(zhuǎn)換只在某些情況下可以,可能應(yīng)用的場景不太豐富,當(dāng)然,這個的確要方便一些,在變量前加上類似 (byte) 的代碼就可以了:
byte destinationVar;
short sourceVar = 281;
destinationVar = (byte)sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);
這個例子比較有意思,輸出的結(jié)果是:sourceVar: 281, destinationVar: 25; 為什么不是變更為255?這就回到開頭提到的了,其實轉(zhuǎn)換過程中,丟掉的是數(shù)據(jù)存儲的二進(jìn)制位:
在轉(zhuǎn)換的過程中,會把超過取值范圍(255二進(jìn)制位)的那個1丟掉,保留其它的位,所以最終結(jié)果是25,而不是255,也不是281。
Convert轉(zhuǎn)換應(yīng)該是常用的方式,因為它始終會進(jìn)行溢出檢查。
溢出檢查配置
有些東西雖然沒什么用,但是我們應(yīng)該知道,否則出問題的時候就不知道怎么解決了。配置:解決方案資源管理器 - 右鍵 - 屬性 - 生成 - 高級 - 檢查運算上溢/下溢:
當(dāng)然,對于強制轉(zhuǎn)換可能需要這個配置,但使用Convert轉(zhuǎn)換時始終會進(jìn)行溢出檢查的,所以這個配置和checked/unchecked就不起作用了。
結(jié)語
每次一看見那些數(shù)據(jù)類型、表達(dá)式的列表表格就頭疼,因為根本記不住。就像哪些類型可以怎么轉(zhuǎn)換成其它的類型的表格一樣,其實個人感覺大可不必去記住這些,在實際做項目的過程中,只要記得有這方面的功能就行了,具體用哪一個,可以再回過頭來翻書或google。
應(yīng)該掌握的是:記住存在隱式轉(zhuǎn)換,但這種方式應(yīng)該盡量少用吧。而顯示轉(zhuǎn)換,方便的就直接用(),當(dāng)然,最可靠的應(yīng)該是Convert,因為在轉(zhuǎn)換時,Convert始終都會進(jìn)行溢出檢查。
相關(guān)文章
C#實現(xiàn)的微信網(wǎng)頁授權(quán)操作邏輯封裝示例
這篇文章主要介紹了C#實現(xiàn)的微信網(wǎng)頁授權(quán)操作邏輯封裝,分析了微信網(wǎng)頁授權(quán)操作的原理、步驟并給出了C#實現(xiàn)的網(wǎng)頁授權(quán)操作邏輯封裝類,需要的朋友可以參考下2016-10-10