最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年10月24日 10:44:56   投稿:shichen2014  
這篇文章主要介紹了C#中is與as的區(qū)別,較為詳細(xì)的分析了is與as的原理與特性及用法區(qū)別,具有很好的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下

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

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

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

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

二、C#中的is

檢查一個(gè)對(duì)象是否兼容于其他指定的類(lèi)型,并返回一個(gè)Bool值,如果一個(gè)對(duì)象是某個(gè)類(lèi)型或是其父類(lèi)型的話(huà)就返回為true,否則的話(huà)就會(huì)返回為false。永遠(yuǎn)不會(huì)拋出異常
如果對(duì)象引用為null,那么is操作符總是返回為false,因?yàn)闆](méi)有對(duì)象可以檢查其類(lèi)型。

例如

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

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

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

例如

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

使用as操作符有如下幾點(diǎn)限制

第一個(gè)就是,不用在類(lèi)型之間進(jìn)行類(lèi)型轉(zhuǎn)化,即如下編寫(xiě)就會(huì)出現(xiàn)編譯錯(cuò)誤。

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

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

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

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

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

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

4、AS模式的效率要比IS模式的高,因?yàn)榻柚鶬S進(jìn)行類(lèi)型轉(zhuǎn)換的化,需要執(zhí)行兩次類(lèi)型兼容檢查。而AS只需要做一次類(lèi)型兼容,一次null檢查,null檢查要比類(lèi)型兼容檢查快。

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

1、Object => 已知引用類(lèi)型
使用as操作符來(lái)完成

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

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

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

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

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

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

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

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

相關(guān)文章

  • 使用策略模式實(shí)現(xiàn)報(bào)警服務(wù)示例詳解(短信報(bào)警)

    使用策略模式實(shí)現(xiàn)報(bào)警服務(wù)示例詳解(短信報(bào)警)

    服務(wù)的功能:這個(gè)服務(wù)就是能夠?qū)崿F(xiàn)多通路報(bào)警的服務(wù),比如郵件報(bào)警、客戶(hù)端報(bào)警、短信報(bào)警等,該服務(wù)靈活性還不錯(cuò),比較方便擴(kuò)展
    2014-01-01
  • vs2019 實(shí)現(xiàn)C#調(diào)用c++的dll兩種方法

    vs2019 實(shí)現(xiàn)C#調(diào)用c++的dll兩種方法

    這篇文章主要介紹了vs2019 實(shí)現(xiàn)C#調(diào)用c++的dll兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C#圖像亮度調(diào)式與偽彩色圖的處理教程(推薦)

    C#圖像亮度調(diào)式與偽彩色圖的處理教程(推薦)

    下面小編就為大家推薦一篇C#圖像亮度調(diào)式與偽彩色圖的處理教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法

    C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法

    這篇文章主要介紹了C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了SqlDataAdapter對(duì)象獲取數(shù)據(jù)具體步驟與相關(guān)使用技巧,需要的朋友可以參考下
    2016-02-02
  • 最新評(píng)論

    云安县| 太保市| 新沂市| 和林格尔县| 吉水县| 安远县| 武清区| 东阳市| 交口县| 博罗县| 西宁市| 河西区| 阿鲁科尔沁旗| 台中市| 德惠市| 濮阳县| 伊金霍洛旗| 宁陵县| 大渡口区| 吴旗县| 台东市| 柯坪县| 苗栗市| 长白| 通州区| 巴林左旗| 茂名市| 咸宁市| 林芝县| 南雄市| 曲麻莱县| 巍山| 宜兰县| 天峻县| 饶平县| 海丰县| 施秉县| 平顶山市| 池州市| 宁安市| 若羌县|