姜蘊(yùn)莉
摘要:數(shù)據(jù)類型是《C#程序設(shè)計(jì)》課程中的基礎(chǔ)理論知識(shí),不同數(shù)據(jù)類型之間的轉(zhuǎn)換對(duì)于初學(xué)者是個(gè)難點(diǎn),該文從教學(xué)的角度對(duì)數(shù)據(jù)類型轉(zhuǎn)換的各種方法進(jìn)行歸納、分析。
關(guān)鍵詞:C#;數(shù)據(jù)類型;類型轉(zhuǎn)換
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)35-8457-02
Analysis of the Data Type Conversion in "C# Program Design" Course Teaching
JIANG Yun-li
(Jiangxi Vocational College of Finance and Ecanamics, Jiujiang 332000, China)
Abstract: Data type is a basic theory knowledge of "C# programming" course, the conversion between different data types is a difficulty for beginners, this paper summarized and analyzed the various methods of data type conversion from the perspective of teaching.
Key words: C#; data type; type conversion
利用C#語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),需要將現(xiàn)實(shí)問題抽象為各個(gè)類及其相關(guān)的數(shù)據(jù),這些數(shù)據(jù)在計(jì)算機(jī)內(nèi)部以不同的方式、空間進(jìn)行存儲(chǔ),成為不同的數(shù)據(jù)類型。根據(jù)在計(jì)算機(jī)內(nèi)存中的存儲(chǔ)方式和使用規(guī)則的不同,C#中的數(shù)據(jù)可以分為值類型和引用類型,引用類型可分為對(duì)象(object)、類、接口、字符串、委托、數(shù)組,值類型可分為基本類型、枚舉類型、結(jié)構(gòu)類型等,基本類型可分為整數(shù)類型、浮點(diǎn)類型、字符類型、布爾類型,整數(shù)類型又分為sbyte、byte、short、ushort、int、uint、long、ulong,浮點(diǎn)類型又分為float、double、decimal[1]。不同的數(shù)據(jù)類型間進(jìn)行各種運(yùn)算時(shí)需要進(jìn)行相互轉(zhuǎn)換,對(duì)于初學(xué)者來說,在近20種數(shù)據(jù)類型間按照不同的方式、方法進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換是容易混淆的,該文對(duì)C#程序設(shè)計(jì)課程在教學(xué)過程中的數(shù)據(jù)類型轉(zhuǎn)換問題進(jìn)行歸納、分析。
1 數(shù)值類型間的轉(zhuǎn)換方式
1.1 隱式轉(zhuǎn)換
默認(rèn)的、不加聲明的轉(zhuǎn)換就是隱式轉(zhuǎn)換。數(shù)值類型中的各個(gè)子類型在計(jì)算機(jī)內(nèi)部的存儲(chǔ)形式都相同,只不過是占用的存儲(chǔ)空間不同、能夠表示的數(shù)據(jù)大小和精度不同。在數(shù)值類型數(shù)據(jù)的轉(zhuǎn)換中,從小范圍、低精度的數(shù)據(jù)類型向大范圍、高精度的數(shù)據(jù)類型轉(zhuǎn)換時(shí),系統(tǒng)會(huì)自動(dòng)地進(jìn)行安全的數(shù)據(jù)類型轉(zhuǎn)換而不造成數(shù)據(jù)信息的丟失和異常[2]。例如:short類型占用16位的內(nèi)存空間,能夠表示-32768至32767之間的整數(shù),它可以隱式地、不加任何聲明地轉(zhuǎn)換成比它范圍大、精度高的int、long、float、double、decimal類型。而float類型只能隱式轉(zhuǎn)換為比它范圍大、精度高的doubele類型,不能隱式轉(zhuǎn)換為比它范圍小、精度高的的decimal類型。
1.2顯式轉(zhuǎn)換
需要指明要轉(zhuǎn)換成的數(shù)據(jù)類型的數(shù)據(jù)類型轉(zhuǎn)換稱為顯式轉(zhuǎn)換,顯式轉(zhuǎn)換的語(yǔ)法格式是:(目標(biāo)數(shù)據(jù)類型標(biāo)識(shí)符)表達(dá)式。顯示轉(zhuǎn)換也稱為強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換,可以將范圍大或者精度高的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換成范圍小、精度低的數(shù)據(jù)類型,這樣的轉(zhuǎn)換有可能造成數(shù)據(jù)信息的丟失和異常,所以在使用強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換時(shí)要注意[3]。例如:ushort類型占用16位存儲(chǔ)空間,能表示的數(shù)據(jù)范圍為0至65535,byte類型占用8位存儲(chǔ)空間,能表示的數(shù)據(jù)范圍為0至255,將大小為0至255的ushort類型數(shù)據(jù)顯式轉(zhuǎn)換為byte類型數(shù)據(jù)時(shí)不會(huì)出現(xiàn)異常,而將大小為256至65535之間的ushort類型數(shù)據(jù)顯式轉(zhuǎn)換為byte類型數(shù)據(jù)時(shí)則會(huì)發(fā)生異常。在這里需要注意的是,目標(biāo)數(shù)據(jù)類型標(biāo)識(shí)符和后面的表達(dá)式(表達(dá)式為單個(gè)變量時(shí)除外)都需要加上英文的圓括號(hào),例如:“(int)(a+b)”表示將“a+b”轉(zhuǎn)換為int類型,而如果寫成“(int)a+b”則表示將x轉(zhuǎn)換成int類型后再與b進(jìn)行“+”運(yùn)算。
2 利用Convert類進(jìn)行不同值類型間的轉(zhuǎn)換
利用Convert類下的各個(gè)數(shù)據(jù)類型轉(zhuǎn)換方法可以將整數(shù)類型、浮點(diǎn)類型、Boolean、Char、DateTime、String類型轉(zhuǎn)換成為另一個(gè)基本數(shù)據(jù)類型??梢愿鶕?jù)要轉(zhuǎn)換成的目標(biāo)數(shù)據(jù)類型來選擇Convert類下的相應(yīng)的方法。例如:要將某個(gè)數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換成int類型的數(shù)據(jù),就可以選擇使用Convert類下面的ToInt32方法,這個(gè)方法是將指定的值轉(zhuǎn)換為32位有符號(hào)的整數(shù)。在轉(zhuǎn)換過程中,如果源數(shù)據(jù)類型向目標(biāo)數(shù)據(jù)類型的轉(zhuǎn)換是無意義的轉(zhuǎn)換,則轉(zhuǎn)換無效、不執(zhí)行任何轉(zhuǎn)換,例如:從Char類型的數(shù)據(jù)轉(zhuǎn)換為Boolean類型的數(shù)據(jù)就是無效的數(shù)據(jù)類型轉(zhuǎn)換。
3 數(shù)值類型與字符串類型間的轉(zhuǎn)換
3.1 利用Parse、TryParse方法將字符串類型轉(zhuǎn)換為數(shù)值類型
每個(gè)數(shù)值類型的數(shù)據(jù)都擁有一個(gè)Parse方法和TryParse方法,用來將數(shù)字形式的字符串轉(zhuǎn)化為相應(yīng)的數(shù)值類型。例如:語(yǔ)句“int.Parse(“123”);”可以將字符串類型的數(shù)據(jù)“123”轉(zhuǎn)換為數(shù)值型數(shù)據(jù)123。在使用Parse方法進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換時(shí),轉(zhuǎn)換成功則方法的返回值為要轉(zhuǎn)換成的數(shù)據(jù)類型值,如果要轉(zhuǎn)換的字符串中包含有除數(shù)字和小數(shù)點(diǎn)之外的其他不能轉(zhuǎn)換為數(shù)值的字符,則轉(zhuǎn)換失敗并拋出異常[4]。利用TryParse方法也可以將字符串類型的數(shù)據(jù)轉(zhuǎn)化為數(shù)值型數(shù)據(jù),它和Parse方法的區(qū)別在于數(shù)據(jù)類型轉(zhuǎn)換成功,則TryParse方法返回True,轉(zhuǎn)換不成功則返回False,轉(zhuǎn)換成功的結(jié)果保存在TryParse方法的最后一個(gè)輸出值參數(shù)中,如果轉(zhuǎn)換失敗結(jié)果為0并不拋出異常。
3.2 利用ToString方法將數(shù)值類型轉(zhuǎn)換為字符串類型
在c#中,有個(gè)根類型System.Object類,其他所有的類型都隱式地派生于該類,并且重寫該根類型的 ToString()方法,使得派生于根類型Object的每個(gè)數(shù)據(jù)類型類都具有了一個(gè)ToString()方法。ToString()方法可以將數(shù)值類型轉(zhuǎn)換成為對(duì)應(yīng)的字符串類型。例如:聲明x為int類型的變量并且為其賦值,執(zhí)行語(yǔ)句“string s=x.ToString();”,這個(gè)語(yǔ)句是調(diào)用int類型的ToString()方法將int類型的變量x轉(zhuǎn)換為字符串類型,再賦值給字符串類型的變量s。
4 值類型與引用類型間的轉(zhuǎn)換
值類型與引用類型之間的轉(zhuǎn)換可以分別通過裝箱和拆箱來完成。將一個(gè)引用類型轉(zhuǎn)換為數(shù)值類型就稱為拆箱,而相反地將一個(gè)數(shù)值類型的數(shù)據(jù)轉(zhuǎn)化為引用類型則稱為裝箱。例如:聲明一個(gè)int類型變量x并為其賦值,執(zhí)行語(yǔ)句“object o=x;”,這個(gè)語(yǔ)句就是一個(gè)裝箱的操作,將值類型變量x裝箱為object類型數(shù)據(jù)之后再?gòu)?fù)制給“=”號(hào)左側(cè)的對(duì)象o。再例如:聲明一個(gè)object類型變量o并為其賦值,執(zhí)行語(yǔ)句“int y=(int)o;”,這個(gè)語(yǔ)句就是一個(gè)拆箱的操作,將對(duì)象類型變量o拆箱為int類型數(shù)據(jù)之后再?gòu)?fù)制給“=”號(hào)左側(cè)的int類型變量y。
5 利用as關(guān)鍵詞完成引用類型的轉(zhuǎn)換
利用as關(guān)鍵詞可以將某種類型的數(shù)據(jù)轉(zhuǎn)換成為另外一種引用類型的數(shù)據(jù),當(dāng)轉(zhuǎn)換失敗時(shí)不引發(fā)異常只返回空值。語(yǔ)法格式為:expression as type,這里的type只能是引用類型[5]。實(shí)際上,利用as完成的轉(zhuǎn)換可以看作是引用類型的強(qiáng)制類型轉(zhuǎn)換。例如:s是student類型的對(duì)象,m是master類型的對(duì)象,則語(yǔ)句“s=m as student”就是利用as關(guān)鍵詞將master類型的變量m強(qiáng)制轉(zhuǎn)換為student類型。
6 數(shù)據(jù)類型的其他轉(zhuǎn)換技巧
6.1 字符串與數(shù)值混合表達(dá)式
當(dāng)兩個(gè)數(shù)值型數(shù)據(jù)進(jìn)行“+”運(yùn)算時(shí)視作做加法;當(dāng)兩個(gè)字符串進(jìn)行“+”運(yùn)算時(shí)視作將兩個(gè)字符串進(jìn)行連接運(yùn)算,成為一個(gè)新的字符串;當(dāng)一個(gè)字符串類型的數(shù)據(jù)與一個(gè)數(shù)值類型的數(shù)據(jù)進(jìn)行“+”運(yùn)算時(shí),系統(tǒng)會(huì)自動(dòng)地將數(shù)值型數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的字符串類型數(shù)據(jù),然后再與原來的另一個(gè)字符串?dāng)?shù)據(jù)進(jìn)行字符串連接運(yùn)算,生成一個(gè)新的字符串。例如:在表達(dá)式“"中國(guó)"+2014”中,系統(tǒng)將數(shù)值型數(shù)據(jù)2014轉(zhuǎn)換成字符串類型再與字符串“中國(guó)”進(jìn)行連接運(yùn)算,最后生成新的字符串“中國(guó)2014”。
6.2 加后綴
在程序設(shè)計(jì)過程中,很多數(shù)據(jù)都可以采用多種數(shù)據(jù)類型來存儲(chǔ),例如:數(shù)字3.14分別可以用float、double、decimal類型來存儲(chǔ),而double類型是默認(rèn)的帶小數(shù)的類型,如果希望將3.14表示為float類型,則只需要在3.14后面加上float類型名的后綴“f”,則“3.14f”就表示是一個(gè)float類型的3.14了。常見的數(shù)據(jù)類型及其對(duì)應(yīng)的后綴名有:uint、ulog類型的后綴名為U或u;long、ulong類型的后綴名為L(zhǎng)或者l;ulong類型的后綴名為ul、uL、Ul、UL、lu、Lu、lU或者LU;float類型的后綴名為f或者F;double類型的后綴名為D或者d;decimal類型的后綴名為M或者m。
7 結(jié)束語(yǔ)
在C#程序設(shè)計(jì)課程的教學(xué)過程中,數(shù)據(jù)類型及數(shù)據(jù)類型轉(zhuǎn)換部分的知識(shí)是該課程的基礎(chǔ)語(yǔ)法知識(shí),是后續(xù)知識(shí)的基石。C#語(yǔ)言中的數(shù)據(jù)類型繁多,在程序設(shè)計(jì)過程中會(huì)經(jīng)常涉及到數(shù)據(jù)類型之間的相互轉(zhuǎn)換,對(duì)于初學(xué)者容易混淆。該文針對(duì)這些問題,描述了C#語(yǔ)言中的數(shù)據(jù)類型轉(zhuǎn)換的各種規(guī)則、方法,并給出各種方法使用時(shí)的注意事項(xiàng)。
參考文獻(xiàn):
[1] 崔曉軍.C#.NET程序設(shè)計(jì)案例教程[M].清華大學(xué)出版社,2013.
[2] 侯傳宇.論C語(yǔ)言教學(xué)中數(shù)據(jù)類型轉(zhuǎn)換的問題[J].巢湖學(xué)院學(xué)報(bào),2008(3).
[3] 戴敏.C#程序開發(fā)實(shí)用教程[B].清華大學(xué)出版社,2013.
[4] 徐衛(wèi)英.C#語(yǔ)言中數(shù)據(jù)類型轉(zhuǎn)換的應(yīng)用探討[J].電腦學(xué)習(xí),2010(4).
[5] 王國(guó)勝.C#基礎(chǔ)與案例開發(fā)詳解[M].清華大學(xué)出版社,2009.