国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中AS和IS關鍵字的用法

2020-01-24 01:14:27
字體:
來源:轉載
供稿:網友

在程序中,進行類型轉換是常見的事,C#支持基本的強制類型轉換方法,例如:

Object obj1 = new NewType();NewType newValue = (NewType)obj1;

這樣強制轉換的時候,這個過程是不安全的,因此需要用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操作符不會做過的轉換操作,當需要轉化對象的類型屬于轉換目標類型或者轉換目標類型的派生類型時,那么此轉換操作才能成功,而且并不產生新的對象【當不成功的時候,會返回null】。因此用as進行類型轉換是安全的。

效率:

當用as操作符進行類型轉換的時候,首先判斷當前對象的類型,當類型滿足要求后才進行轉換,而傳統的類型轉換方式,是用當前對象直接去轉換,而且為了保護轉換成功,要加上try-catch,所以,相對來說,as效率高點。
需要注意的是,不管是傳統的還是as操作符進行類型轉換之后,在使用之前,需要進行判斷轉換是否成功,如下:

if(newValue != null){//Work with the object named “newValue“}

但是,使用as操作符要注意以下幾點:

1、不用在類型之間進行類型轉化,即如下編寫就會出現編譯錯誤。

NewType newValue = new NewType();NewTYpe1 newValue = newValue as NewTYpe1;

2、不能應用在值類型數據,即不能如下寫(也會出現編譯錯誤)

Object obj1 = 11;int nValue = obj1 as int;

對于1.,可以用傳統的類型轉換方式完成:

NewTypeOne newTestOne = new NewTypeOne();NewTypeTwo newTestTwo = (NewTypeTwo)newTestOne;

要想使上面的操作正確完成,在原有類型中增加類型轉換操作符函數,即需要完成類似如下的代碼:

public calss NewTypeOne{public static explicit operator NewTypeTwo( NewTypeOne obj1){//Convert object into new type}}

對于2,在C#中可以使用is操作符,再加上老式的類型轉換操作,就可以安全完成轉換,要完成如上操作,正確的寫法如下:

Object obj1 = 11;if(objTest is int ){int nValue = (int)obj1;}

在C#中提供的很好的類型轉換方式總結為:

Object => 已知引用類型――使用as操作符完成;

Object => 已知值類型――先使用is操作符來進行判斷,再用類型強轉換方式進行轉換;

已知引用類型之間轉換――首先需要相應類型提供轉換函數,再用類型強轉換方式進行轉換;

已知值類型之間轉換――最好使用系統提供的Conver類所涉及的靜態方法。

下面給大家介紹下C#中關于as關鍵字的使用

我們在實際編碼中有時會用到as關鍵字來將對象轉換為指定類型,與is類型不同的是,is關鍵字是用于檢查對象是否與給定類型兼容,如果兼容就返回true,如果不兼容就返回false。而as關鍵字會直接進行類型轉換,如果轉換成功會返回轉換后的對象,如果轉換不成功則不會拋出異常而是返回null。

  下面我們創建一個簡單的用例來闡述as的用法:

1.以visual studio2015為開發環境,新建一個window Form窗體應用程序,并將其命名為TransForm.

2.向窗體中添加一個button控件,用于類型轉換,再添加一個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("轉換Obejct成功","提示");}else{Message.Box("轉換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("轉換Stream成功","提示");}else{Message.Box("轉換Stream失敗","提示!")}}}}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 揭阳市| 察隅县| 怀柔区| 蛟河市| 海丰县| 东乌| 贵溪市| 蕲春县| 渭源县| 印江| 正宁县| 绵阳市| 峨眉山市| 滕州市| 孟津县| 沛县| 大厂| 平潭县| 岳普湖县| 临桂县| 邢台县| 沅江市| 运城市| 榕江县| 托克托县| 名山县| 南部县| 白城市| 大余县| 平邑县| 宜城市| 公安县| 思南县| 康定县| 靖西县| 武乡县| 襄樊市| 广南县| 通渭县| 乌鲁木齐县| 绥阳县|