C#中AS和IS關鍵字的用法
在程序中,進行類型轉(zhuǎn)換是常見的事,C#支持基本的強制類型轉(zhuǎn)換方法,例如:
Object obj1 = new NewType(); NewType newValue = (NewType)obj1;
這樣強制轉(zhuǎn)換的時候,這個過程是不安全的,因此需要用try-catch語句進行保護,這樣一來,比較安全的代碼方式應如下所示:
Object obj1 = new NewType(); NewType newValue = null; try { newValue = (NewType)obj1; } catch (Exception err) { MessageBox.Show(err.Message); }
但是上面的寫法在C#中已是過時的寫法,也是比較低效的寫法,比較高效且時尚的寫法是用as操作符,如下:
Object obj1 = new NewType(); NewTYpe newValue = obj1 as NewType
安全性:
as操作符不會做過的轉(zhuǎn)換操作,當需要轉(zhuǎn)化對象的類型屬于轉(zhuǎn)換目標類型或者轉(zhuǎn)換目標類型的派生類型時,那么此轉(zhuǎn)換操作才能成功,而且并不產(chǎn)生新的對象【當不成功的時候,會返回null】。因此用as進行類型轉(zhuǎn)換是安全的。
效率:
當用as操作符進行類型轉(zhuǎn)換的時候,首先判斷當前對象的類型,當類型滿足要求后才進行轉(zhuǎn)換,而傳統(tǒng)的類型轉(zhuǎn)換方式,是用當前對象直接去轉(zhuǎn)換,而且為了保護轉(zhuǎn)換成功,要加上try-catch,所以,相對來說,as效率高點。
需要注意的是,不管是傳統(tǒng)的還是as操作符進行類型轉(zhuǎn)換之后,在使用之前,需要進行判斷轉(zhuǎn)換是否成功,如下:
if(newValue != null) { //Work with the object named “newValue“ }
但是,使用as操作符要注意以下幾點:
1、不用在類型之間進行類型轉(zhuǎn)化,即如下編寫就會出現(xiàn)編譯錯誤。
NewType newValue = new NewType(); NewTYpe1 newValue = newValue as NewTYpe1;
2、不能應用在值類型數(shù)據(jù),即不能如下寫(也會出現(xiàn)編譯錯誤)
Object obj1 = 11; int nValue = obj1 as int;
對于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 } }
對于2,在C#中可以使用is操作符,再加上老式的類型轉(zhuǎn)換操作,就可以安全完成轉(zhuǎn)換,要完成如上操作,正確的寫法如下:
Object obj1 = 11; if(objTest is int ) { int nValue = (int)obj1; }
在C#中提供的很好的類型轉(zhuǎn)換方式總結為:
Object => 已知引用類型——使用as操作符完成;
Object => 已知值類型——先使用is操作符來進行判斷,再用類型強轉(zhuǎn)換方式進行轉(zhuǎn)換;
已知引用類型之間轉(zhuǎn)換——首先需要相應類型提供轉(zhuǎn)換函數(shù),再用類型強轉(zhuǎn)換方式進行轉(zhuǎn)換;
已知值類型之間轉(zhuǎn)換——最好使用系統(tǒng)提供的Conver類所涉及的靜態(tài)方法。
下面給大家介紹下C#中關于as關鍵字的使用
我們在實際編碼中有時會用到as關鍵字來將對象轉(zhuǎn)換為指定類型,與is類型不同的是,is關鍵字是用于檢查對象是否與給定類型兼容,如果兼容就返回true,如果不兼容就返回false。而as關鍵字會直接進行類型轉(zhuǎn)換,如果轉(zhuǎn)換成功會返回轉(zhuǎn)換后的對象,如果轉(zhuǎn)換不成功則不會拋出異常而是返回null。
下面我們創(chuàng)建一個簡單的用例來闡述as的用法:
1.以visual studio2015為開發(fā)環(huán)境,新建一個window Form窗體應用程序,并將其命名為TransForm.
2.向窗體中添加一個button控件,用于類型轉(zhuǎn)換,再添加一個GroupBox控件,向此控件中添加三個RadioButton控件,分別用于選擇哪種類型。
3.詳細代碼如下:
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失敗","提示!") } } } }
上一篇:C#程序中使用LINQ to XML來查詢XML格式數(shù)據(jù)的實例
欄 目:C#教程
下一篇:Windows中使用C#為文件夾和文件編寫密碼鎖的示例分享
本文標題:C#中AS和IS關鍵字的用法
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6645.html
您可能感興趣的文章
- 01-10C#通過反射獲取當前工程中所有窗體并打開的方法
- 01-10C#實現(xiàn)Winform中打開網(wǎng)頁頁面的方法
- 01-10C#實現(xiàn)由四周向中心縮小的窗體退出特效
- 01-10Extjs4如何處理后臺json數(shù)據(jù)中日期和時間
- 01-10C#中DataGridView常用操作實例小結
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10asp.net中XML如何做增刪改查操作
- 01-10C#利用反射技術實現(xiàn)去掉按鈕選中時的邊框效果
- 01-10C#中查找Dictionary中的重復值的方法
- 01-10C#及WPF獲取本機所有字體和顏色的方法


閱讀排行
本欄相關
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實例總結
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載