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

首頁 > 編程 > C# > 正文

C#中is與as的區(qū)別分析

2020-01-24 02:20:04
字體:
供稿:網(wǎng)友

本文實例分析了C#中is與as的區(qū)別,分享給大家供大家參考。具體分析如下:

一、C#類型的轉(zhuǎn)換

在c#中類型的轉(zhuǎn)換分兩種:顯式和隱式,基本的規(guī)則如下:

1、基類對象轉(zhuǎn)化為子類對象,必須顯式轉(zhuǎn)換,規(guī)則:(類型名) 對象。
2、值類型和引用類型的轉(zhuǎn)換采用裝箱(boxing)或拆箱(unboxing).
3、子類轉(zhuǎn)化為基類對象。
4、基本類型互相之間轉(zhuǎn)化可以用Covent類來實現(xiàn)。
5、字符串類型轉(zhuǎn)換為對應(yīng)的基本類型用Parse方法,除了String類型外其他的類型都可以用Parse方法。
6、用GetType可以取得對象的精確類型。
7、子類轉(zhuǎn)化為基類,采用隱式轉(zhuǎn)換。

二、C#中的is

檢查一個對象是否兼容于其他指定的類型,并返回一個Bool值,如果一個對象是某個類型或是其父類型的話就返回為true,否則的話就會返回為false。永遠不會拋出異常
如果對象引用為null,那么is操作符總是返回為false,因為沒有對象可以檢查其類型。

例如

復(fù)制代碼 代碼如下:
object o = new object();
if (o is Label)
{
    Label lb = (Label)o;
    Response.Write("類型轉(zhuǎn)換成功");
}
else
{
    Response.Write("類型轉(zhuǎn)換失敗");  
}

三、C#中as的轉(zhuǎn)換規(guī)則

1、檢查對象類型的兼容性,并返回轉(zhuǎn)換結(jié)果,如果不兼容則返回null;
2、不會拋出異常;
3、如果結(jié)果判斷為空,則強制執(zhí)行類型轉(zhuǎn)換將拋出NullReferenceException異常;
4、用as來進行類型轉(zhuǎn)換的時候,所要轉(zhuǎn)換的對象類型必須是目標(biāo)類型或者轉(zhuǎn)換目標(biāo)類型的派生類型

例如

復(fù)制代碼 代碼如下:
object o = new object();   
Label lb = o as Label;   
if (lb == null)
{
    Response.Write("類型轉(zhuǎn)換失敗");
}
else
{     
    Response.Write("類型轉(zhuǎn)換成功");
}

使用as操作符有如下幾點限制

第一個就是,不用在類型之間進行類型轉(zhuǎn)化,即如下編寫就會出現(xiàn)編譯錯誤。

復(fù)制代碼 代碼如下:
NewType newValue = new NewType();
NewType1 newValue = newValue as NewType1;

第二個就是,不能應(yīng)用在值類型數(shù)據(jù),即不能如下寫(也會出現(xiàn)編譯錯誤)。

復(fù)制代碼 代碼如下:
object objTest = 11;
int nValue = objTest as int;

四、as與is的區(qū)別

1、AS在轉(zhuǎn)換的同事兼判斷兼容性,如果無法進行轉(zhuǎn)換,則 as 返回 null(沒有產(chǎn)生新的對象)而不是引發(fā)異常。有了AS我想以后就不要再用try-catch來做類型轉(zhuǎn)換的判斷了。因此as轉(zhuǎn)換成功要判斷是否為null。

2、AS是引用類型類型的轉(zhuǎn)換或者裝箱轉(zhuǎn)換,不能用與值類型的轉(zhuǎn)換。如果是值類型只能結(jié)合is來強制轉(zhuǎn)換
3、IS只是做類型兼容判斷,并不執(zhí)行真正的類型轉(zhuǎn)換。返回true或false,不會返回null,對象為null也會返回false。

4、AS模式的效率要比IS模式的高,因為借助IS進行類型轉(zhuǎn)換的化,需要執(zhí)行兩次類型兼容檢查。而AS只需要做一次類型兼容,一次null檢查,null檢查要比類型兼容檢查快。

五、在進行類型轉(zhuǎn)換的時候,可以按照如下的方式進行選擇

1、Object => 已知引用類型
使用as操作符來完成

2、Object => 已知值類型
先使用is操作符來進行判斷,再用類型強轉(zhuǎn)方式進行轉(zhuǎn)換

3、已知引用類型之間轉(zhuǎn)換
首先需要相應(yīng)類型提供轉(zhuǎn)換函數(shù),再用類型強轉(zhuǎn)方式進行轉(zhuǎn)換

4、已知值類型之間轉(zhuǎn)換
最好使用系統(tǒng)提供的Convert類所涉及的靜態(tài)方法

六、(int)和Int32.Parse(),Convert.ToInt32()三者的區(qū)別

1、(int)轉(zhuǎn)換:用在數(shù)值范圍大的類型轉(zhuǎn)換成數(shù)值范圍小的類型時使用,但是如果被轉(zhuǎn)換的數(shù)值大于或者小于數(shù)值范圍,則得到一個錯誤的結(jié)果,利用這種轉(zhuǎn)換方式不能將string轉(zhuǎn)換成int,會報錯。

2、Int32.Parse()轉(zhuǎn)換:在符合數(shù)字格式的string到int類型轉(zhuǎn)換過程中使用,并可以對錯誤的string數(shù)字格式的拋出相應(yīng)的異常。

3、Convert.ToInt32()轉(zhuǎn)換:使用這種轉(zhuǎn)換,所提供的字符串必須是數(shù)值的有效表達方式,該數(shù)還必須不是溢出的數(shù)。否則拋出異常。

希望本文所述對大家的C#程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 古交市| 长丰县| 永德县| 新竹县| 广安市| 泰安市| 静安区| 呼图壁县| 南投县| 西青区| 绥化市| 隆回县| 临湘市| 苏尼特右旗| 梁平县| 黑龙江省| 岑溪市| 商城县| 隆化县| 思茅市| 巴东县| 山阳县| 鸡西市| 湘潭市| 定结县| 漳州市| 大竹县| 大足县| 林州市| 惠州市| 民县| 阳西县| 江安县| 介休市| 巴青县| 弋阳县| 个旧市| 慈利县| 乐平市| 新龙县| 平昌县|