![C的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換_第1頁](http://file4.renrendoc.com/view/560d5a30b3cb0948aca329b12d1a1477/560d5a30b3cb0948aca329b12d1a14771.gif)
![C的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換_第2頁](http://file4.renrendoc.com/view/560d5a30b3cb0948aca329b12d1a1477/560d5a30b3cb0948aca329b12d1a14772.gif)
![C的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換_第3頁](http://file4.renrendoc.com/view/560d5a30b3cb0948aca329b12d1a1477/560d5a30b3cb0948aca329b12d1a14773.gif)
![C的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換_第4頁](http://file4.renrendoc.com/view/560d5a30b3cb0948aca329b12d1a1477/560d5a30b3cb0948aca329b12d1a14774.gif)
![C的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換_第5頁](http://file4.renrendoc.com/view/560d5a30b3cb0948aca329b12d1a1477/560d5a30b3cb0948aca329b12d1a14775.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C#勺隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換C#勺隱式類型轉(zhuǎn)換在C崎言中,一些預(yù)定義的數(shù)據(jù)類型之間存在著預(yù)定義的轉(zhuǎn)換。比如,從int類型轉(zhuǎn)換到long類型。C蹄言中數(shù)據(jù)類型的轉(zhuǎn)換可以用分為兩類:隱式轉(zhuǎn)換(implicitconversions)和顯式轉(zhuǎn)換(explicitconversions)。這篇文章我們將詳細(xì)介紹這兩類轉(zhuǎn)換。.隱式類型轉(zhuǎn)換隱式轉(zhuǎn)換就是系統(tǒng)默認(rèn)的、不需要加以聲明就可以進(jìn)行的轉(zhuǎn)換。在隱式轉(zhuǎn)換過程中,編譯器無需對轉(zhuǎn)換進(jìn)行詳細(xì)檢查就能夠安全地執(zhí)行轉(zhuǎn)換。比如從int類型轉(zhuǎn)換到long類型就是一種隱式轉(zhuǎn)換。隱式轉(zhuǎn)換一般不會(huì)失敗,轉(zhuǎn)換過程中也不會(huì)導(dǎo)致信息丟失。比如:inti=10;longl=i;裝箱轉(zhuǎn)換實(shí)際上就是一種隱式類型轉(zhuǎn)換。在本節(jié),我們還將講解以下隱式轉(zhuǎn)換的規(guī)則:隱式數(shù)值轉(zhuǎn)換隱式數(shù)值轉(zhuǎn)換包括以下幾種:從sbyte類型至Ushort,int,long,float,double,或decimal類型。從byte類型到
short,ushort,int,uint,long,ulong,float,double,或decimal或decimal類從short類型到int,long,float,double,或decimal類型。從ushort類型至Uint,uint,long,ulong,float,double,或decimal類型。從int類型到long,float,double,或decimal類型。從uint類型到long,ulong,float,double,或decimal類型。從long類型到float,double,或decimal類型。從ulong類型到float,double,或decimal類型。從char類型到ushort,int,uint,long,ulong,float,double,或decimal類型。從float類型到double類型。其中,從int,uint,或long到float以及從long到double的轉(zhuǎn)換可能會(huì)導(dǎo)致精度下降,但決不會(huì)引起數(shù)量上的丟失。其它的隱式數(shù)值轉(zhuǎn)換則不會(huì)有任何信息丟失。結(jié)合我們在數(shù)據(jù)類型中學(xué)習(xí)到的值類型的范圍,我們可以發(fā)現(xiàn),隱式數(shù)值轉(zhuǎn)換實(shí)際上就是從低精度的數(shù)值類型到高精度的數(shù)值類型的轉(zhuǎn)換。從上面的10條我們可以看出,不存在到char類型的隱式轉(zhuǎn)換,這意味著其它整型值不能自動(dòng)轉(zhuǎn)換為char類型。這一點(diǎn)我們需要特別注意。下面的程序給出了隱式數(shù)值轉(zhuǎn)換的例子。程序清單1-1:usingSystem;classTest(publicstaticvoidMain()(bytex=16;Console.WriteLine("x={0}",x);ushorty=x;Console.WriteLine("y={0}",y);y=65535;Console.WriteLine("y={0}",y);floatz=y;Console.WriteLine("z={0}",z);}}程序的輸出將是:x=16;y=16;y=65535;z=65535;如果我們在上面程序中的語句之后再加上一句:y=y+i;再重新編譯程序時(shí),編譯器將會(huì)給出一條錯(cuò)誤信息:cannotimplictlyconverttype'int'totype'ushort'這說明,從整數(shù)類型65536到無符號短整型y不存在隱式轉(zhuǎn)換。隱式枚舉轉(zhuǎn)換隱式枚舉轉(zhuǎn)換允許把十進(jìn)制整數(shù)0轉(zhuǎn)換成任何枚舉類型,對應(yīng)其它的整數(shù)則不存在這種隱式轉(zhuǎn)換。還是讓我們用例子來說明。程序清單1-2:usingSystem;enumWeekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};classTest{publicstaticvoidMain(){Weekdayday;day=0;Console.WriteLine(day);}}程序的輸出是:0但是如果我們把語句day=0改寫為day=1,編譯器就會(huì)給出錯(cuò)誤:Cannotimplictlyconverttype'int'type'enum隱式引用轉(zhuǎn)換隱式引用轉(zhuǎn)換包括以下幾類:?從任何引用類型到對象類型的轉(zhuǎn)換?從類類型s到類類型t的轉(zhuǎn)換,其中s是t的派生類。?從類類型s到接口類型t的轉(zhuǎn)換,其中類s實(shí)現(xiàn)了接口to?從接口類型s到接口類型t的轉(zhuǎn)換,其中t是s的父接口。從元素類型為Ts的數(shù)組類型S向元素類型為Tt的數(shù)組類型T轉(zhuǎn)換,這種轉(zhuǎn)換需要滿足下列條件:?S和T只有元素的數(shù)據(jù)類型不同,但它們的維數(shù)相同。?Ts和Tt都是引用類型。?存在從Ts到Tt的隱式引用轉(zhuǎn)換?從任何數(shù)組類型到System.Array的轉(zhuǎn)換。?從任何代表類型到System.Delegate的轉(zhuǎn)換。?從任何數(shù)據(jù)類型或代表類型到System.ICLoneable的轉(zhuǎn)換。?從空類型(null)到任何引用類型的轉(zhuǎn)換。比如,下面的程序無法通過編譯,因?yàn)閿?shù)組的元素類型是值類型,C#中不存在這樣的隱式轉(zhuǎn)換。程序清單1-3:usingSystem;classTestpublicstaticvoidMain(){float[]float_arr=newfloat[10];int[]int_arr=newint[10];float_arr=int_arr;而下面這段程序則是正確的:程序清單1-4:usingSystem;classClass1{}classClass2:Class1{}classTestpublicstaticvoidMain(){Class1[]class1_arr=newClass1[10];class2[]class2_arr=newClass2[10];class1_arr=class2_arr;}程序1-5很有趣,它給出了我們常用的值類型在系統(tǒng)環(huán)境中的原型定義。程序1-5:usingSystem;classTest(publicstaticvoidMain(){float[]float_arr=newfloat[10];double[]double_arr=newdouble[10];sbyte[]sbyte_arr=newsbyte[10];byte[]byte_arr=newbyte[10];ushort[]ushort_arr=newushort[10];int[]int_arr=newint[10];10ng[]long_arr=newlong[10];string[]string_arr=newstring[10];console.WriteLine(float_arr);Console.WriteLine(double_arr);Console.WriteLine(sbyte_arr);Console.WriteLine(byte_arr);Console.WriteLine(ushort_arr);Console.WriteLine(int_arr);Console.WriteLine(long_arr);Console.WriteLine(string_arr);)程序的輸出結(jié)果是:System.Single[];System.Double[];System.Sbyte[];System.Byte[];System.Int16[];system.Int32[];System.Int64口;System.String[];2.C#的顯式類型轉(zhuǎn)換顯式類型轉(zhuǎn)換,又叫強(qiáng)制類型轉(zhuǎn)換。與隱式轉(zhuǎn)換正好相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換的類型。比如下面的例子把一個(gè)類型顯式轉(zhuǎn)換為類型:longl=5000;inti=(int)l;拆箱轉(zhuǎn)換就是一種顯式轉(zhuǎn)換。這里我們還將講解以下轉(zhuǎn)換的規(guī)則:顯式數(shù)值轉(zhuǎn)換顯式枚舉轉(zhuǎn)換顯式引用轉(zhuǎn)換
顯式轉(zhuǎn)換可以發(fā)生在表達(dá)式的計(jì)算過程中它并不是總能成功,而且顯式轉(zhuǎn)換可以發(fā)生在表達(dá)式的計(jì)算過程中它并不是總能成功,而且常??赡芤鹦畔G失。顯式轉(zhuǎn)換包括所有的隱式轉(zhuǎn)換,也就是說把任何系統(tǒng)允許的隱式轉(zhuǎn)換寫成顯式轉(zhuǎn)換的形式都是允許的,如:inti=10;longl=(long)i;顯式數(shù)值轉(zhuǎn)換顯式數(shù)值轉(zhuǎn)換是指當(dāng)不存在相應(yīng)的隱式轉(zhuǎn)換時(shí),從一種數(shù)字類型到另一種數(shù)字類型的轉(zhuǎn)換。包括:從sbyte至Ubyte,ushort,uint,ulong,或char。從byte到sbyte或char。從short至Usbyte,byte,ushort,uint,ulong,或char。從ushort至Usbyte,byte,short,或char。從int至Usbyte,byte,short,ushort,uint,ulong,或char。從uint至Usbyte,byte,short,ushort,int,或char。從long至Usbyte,byte,short,ushort,int,uint,ulong,或char。從ulong至Usbyte,byte,short,ushort,int,uint,long,或char。從char至Usbyte,byte,或short。從float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。從double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,decimal。decimalsbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。這種類型轉(zhuǎn)換有可能丟失信息或?qū)е庐惓伋觯D(zhuǎn)換按照下列規(guī)則進(jìn)行:?對于從一種整型到另一種整型的轉(zhuǎn)換,編譯器將針對轉(zhuǎn)換進(jìn)行溢出檢測,如果沒有發(fā)生溢出,轉(zhuǎn)換成功,否則拋出一個(gè)OverflowException異常。這種檢測還與編譯器中是否設(shè)定了checked選項(xiàng)有關(guān)。?對于從float,double,或decimal到整型的轉(zhuǎn)換,源變量的值通過舍入到最接近的整型值作為轉(zhuǎn)換的結(jié)果。如果這個(gè)整型值超出了目標(biāo)類型的值域,則將拋出一個(gè)OverflowException異常。?對于從double到float的轉(zhuǎn)換,double值通過舍入取最接近的float值。如果這個(gè)值太小,結(jié)果將變成正0或負(fù)0;如果這個(gè)值太大,將變成正無窮或負(fù)無窮。如果原double值是Nan,則轉(zhuǎn)換2果也是NaN?對于從float或double到decimal的轉(zhuǎn)換,源值將轉(zhuǎn)換成小數(shù)形式并通過舍入取到小數(shù)點(diǎn)后28位(如果有必要的話)。如果源值太小,則結(jié)果為0;如果太大以致不能用小數(shù)表示,或是無窮和NaN,則將拋出InvalidCastException異常。?對于從decimal到float或double的轉(zhuǎn)換,小數(shù)的值通過舍入取最接近的值。這種轉(zhuǎn)換可能會(huì)丟失精度,但不會(huì)引起異常。程序清單2-1:usingsystem;classTest{staticvoidMain(){longlongValue=Int64.MaxValue;intintValue=(int)longValue;Console.WriteLine("(int){0}={1}”,longValue,intValue);}}這個(gè)例子把一個(gè)int類型轉(zhuǎn)換成為long類型,輸出結(jié)果是:(int)9223372036854775807=-1這是因?yàn)榘l(fā)生了溢出,從而在顯式類型轉(zhuǎn)換時(shí)導(dǎo)致了信息丟失。顯式枚舉轉(zhuǎn)換顯式枚舉轉(zhuǎn)換包括以下內(nèi)容:?從sbye,byte,short,ushort,int,uint,long,ulong,char,float,double,或decimal到任何枚舉類型。?從任何枚舉類型到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,或decimal。?從任何枚舉類型到任何其它枚舉類型。顯式枚舉轉(zhuǎn)換是這樣進(jìn)行的:它實(shí)際上是枚舉類型的元素類型與相應(yīng)類型之間的隱式或顯式轉(zhuǎn)換。比如,有一個(gè)元素類型為int的枚舉類型E,則當(dāng)執(zhí)行從E到byte的顯式枚舉轉(zhuǎn)換時(shí),實(shí)際上作的是從int到byte的顯式數(shù)字轉(zhuǎn)換;當(dāng)執(zhí)行從byte到E的顯式枚舉轉(zhuǎn)換時(shí),實(shí)際上是執(zhí)行byte到int的隱式數(shù)字轉(zhuǎn)換。比如,對程序1-2,我們改寫如下:程序清單2-2:usingSystem;enumWeekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};classTest{publicstaticvoidMain(){Weekdayday;day=(Weekday)3;Console.WriteLine(day);))程序的輸出是:32.3顯式引用轉(zhuǎn)換顯式引用轉(zhuǎn)換包括:?從對象到任何引用類型?從類類型S到類類型T,其中S是T的基類。?從基類型S到接口類型T,其中S不是密封類,而且沒有實(shí)現(xiàn)To?從接口類型S到類類型T,其中T不是密封類,而且沒有實(shí)現(xiàn)So?從接口類型S到接口類型T,其中S不是T的子接口。從元素類型為Ts的數(shù)組類型S到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中介服務(wù)合同糾紛訴狀
- 2025年商品銷售合同范本
- 2025年度展覽會(huì)現(xiàn)場禮品定制合同
- 2025年度二手房交易合同包含家電設(shè)施安裝服務(wù)
- 2025年度城市公共交通運(yùn)輸承包合同
- 2025年兒童服裝批發(fā)合同
- 2025年倉儲(chǔ)托管框架合同書稿
- 2025年度智慧城市雨水收集與處理藥劑供應(yīng)合同
- 2025年度大型水庫建設(shè)與維護(hù)水利工程合同范本
- 2025年度消防安全風(fēng)險(xiǎn)評估與應(yīng)急預(yù)案編制服務(wù)合同
- LY/T 3400-2024荒漠與荒漠化防治術(shù)語
- 2025年春季學(xué)期學(xué)校全面工作安排表
- 幼兒園開學(xué)前的廚房人員培訓(xùn)
- 《幼兒教育政策與法規(guī)》教案-單元6 幼兒園的工作人員
- 油漆工培訓(xùn)試題
- 2024年四川綿陽初中學(xué)業(yè)水平考試英語試卷真題(含答案詳解)
- 光伏施工安全培訓(xùn)課件
- 2025年閥門和龍頭項(xiàng)目發(fā)展計(jì)劃
- 快手信息流廣告優(yōu)化師(初級)認(rèn)證考試題庫(附答案)
- 園林景觀綠化工程施工組織設(shè)計(jì)方案
- 消防員證考試題庫2000題中級
評論
0/150
提交評論