C#中AS和IS關(guān)鍵字的用法
在程序中,進(jìn)行類型轉(zhuǎn)換是常見(jiàn)的事,C#支持基本的強(qiáng)制類型轉(zhuǎn)換方法,例如:
Object obj1 = new NewType(); NewType newValue = (NewType)obj1;
這樣強(qiáng)制轉(zhuǎn)換的時(shí)候,這個(gè)過(guò)程是不安全的,因此需要用try-catch語(yǔ)句進(jìn)行保護(hù),這樣一來(lái),比較安全的代碼方式應(yīng)如下所示:
Object obj1 = new NewType(); NewType newValue = null; try { newValue = (NewType)obj1; } catch (Exception err) { MessageBox.Show(err.Message); }
但是上面的寫法在C#中已是過(guò)時(shí)的寫法,也是比較低效的寫法,比較高效且時(shí)尚的寫法是用as操作符,如下:
Object obj1 = new NewType(); NewTYpe newValue = obj1 as NewType
安全性:
as操作符不會(huì)做過(guò)的轉(zhuǎn)換操作,當(dāng)需要轉(zhuǎn)化對(duì)象的類型屬于轉(zhuǎn)換目標(biāo)類型或者轉(zhuǎn)換目標(biāo)類型的派生類型時(shí),那么此轉(zhuǎn)換操作才能成功,而且并不產(chǎn)生新的對(duì)象【當(dāng)不成功的時(shí)候,會(huì)返回null】。因此用as進(jìn)行類型轉(zhuǎn)換是安全的。
效率:
當(dāng)用as操作符進(jìn)行類型轉(zhuǎn)換的時(shí)候,首先判斷當(dāng)前對(duì)象的類型,當(dāng)類型滿足要求后才進(jìn)行轉(zhuǎn)換,而傳統(tǒng)的類型轉(zhuǎn)換方式,是用當(dāng)前對(duì)象直接去轉(zhuǎn)換,而且為了保護(hù)轉(zhuǎn)換成功,要加上try-catch,所以,相對(duì)來(lái)說(shuō),as效率高點(diǎn)。
需要注意的是,不管是傳統(tǒng)的還是as操作符進(jìn)行類型轉(zhuǎn)換之后,在使用之前,需要進(jìn)行判斷轉(zhuǎn)換是否成功,如下:
if(newValue != null) { //Work with the object named “newValue“ }
但是,使用as操作符要注意以下幾點(diǎn):
1、不用在類型之間進(jìn)行類型轉(zhuǎn)化,即如下編寫就會(huì)出現(xiàn)編譯錯(cuò)誤。
NewType newValue = new NewType(); NewTYpe1 newValue = newValue as NewTYpe1;
2、不能應(yīng)用在值類型數(shù)據(jù),即不能如下寫(也會(huì)出現(xiàn)編譯錯(cuò)誤)
Object obj1 = 11; int nValue = obj1 as int;
對(duì)于1.,可以用傳統(tǒng)的類型轉(zhuǎn)換方式完成:
NewTypeOne newTestOne = new NewTypeOne(); NewTypeTwo newTestTwo = (NewTypeTwo)newTestOne;
要想使上面的操作正確完成,在原有類型中增加類型轉(zhuǎn)換操作符函數(shù),即需要完成類似如下的代碼:
public calss NewTypeOne { public static explicit operator NewTypeTwo( NewTypeOne obj1) { //Convert object into new type } }
對(duì)于2,在C#中可以使用is操作符,再加上老式的類型轉(zhuǎn)換操作,就可以安全完成轉(zhuǎn)換,要完成如上操作,正確的寫法如下:
Object obj1 = 11; if(objTest is int ) { int nValue = (int)obj1; }
在C#中提供的很好的類型轉(zhuǎn)換方式總結(jié)為:
Object => 已知引用類型——使用as操作符完成;
Object => 已知值類型——先使用is操作符來(lái)進(jìn)行判斷,再用類型強(qiáng)轉(zhuǎn)換方式進(jìn)行轉(zhuǎn)換;
已知引用類型之間轉(zhuǎn)換——首先需要相應(yīng)類型提供轉(zhuǎn)換函數(shù),再用類型強(qiáng)轉(zhuǎn)換方式進(jìn)行轉(zhuǎn)換;
已知值類型之間轉(zhuǎn)換——最好使用系統(tǒng)提供的Conver類所涉及的靜態(tài)方法。
下面給大家介紹下C#中關(guān)于as關(guān)鍵字的使用
我們?cè)趯?shí)際編碼中有時(shí)會(huì)用到as關(guān)鍵字來(lái)將對(duì)象轉(zhuǎn)換為指定類型,與is類型不同的是,is關(guān)鍵字是用于檢查對(duì)象是否與給定類型兼容,如果兼容就返回true,如果不兼容就返回false。而as關(guān)鍵字會(huì)直接進(jìn)行類型轉(zhuǎn)換,如果轉(zhuǎn)換成功會(huì)返回轉(zhuǎn)換后的對(duì)象,如果轉(zhuǎn)換不成功則不會(huì)拋出異常而是返回null。
下面我們創(chuàng)建一個(gè)簡(jiǎn)單的用例來(lái)闡述as的用法:
1.以visual studio2015為開(kāi)發(fā)環(huán)境,新建一個(gè)window Form窗體應(yīng)用程序,并將其命名為TransForm.
2.向窗體中添加一個(gè)button控件,用于類型轉(zhuǎn)換,再添加一個(gè)GroupBox控件,向此控件中添加三個(gè)RadioButton控件,分別用于選擇哪種類型。
3.詳細(xì)代碼如下:
private void btn_Get_Checked(object sender,EventArgs e) { if(rbtn_object.checked) { using (FileStream P_filestream=new FileStream(@'d:\log.txt',System.IO.FileMode.Create)) { object p_Object = P_filestream as object; if(p_Object!=null) { Message.Box("轉(zhuǎn)換Obejct成功","提示"); } else { Message.Box("轉(zhuǎn)換Obejct失敗","提示!") } } if(rbtn_stream.checked) { using (FileStream P_filestream=new FileStream(@'d:\log.txt',System.IO.FileMode.Create)) { obejct p_object=P_filestream; Stream P_Stream = p_objec as Stream; if(P_Stream!=null) { Message.Box("轉(zhuǎn)換Stream成功","提示"); } else { Message.Box("轉(zhuǎn)換Stream失敗","提示!") } } } }
相關(guān)文章
Unity實(shí)現(xiàn)老虎機(jī)滾動(dòng)抽獎(jiǎng)效果的示例代碼
這篇文章主要介紹了Unity實(shí)現(xiàn)老虎機(jī)滾動(dòng)抽獎(jiǎng)效果的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

C#中的除法運(yùn)算符與VB.NET中的除法運(yùn)算符

C#調(diào)用百度地圖API根據(jù)地名獲取經(jīng)緯度geocoding