C#中is與as的區別剖析。本站提示廣大學習愛好者:(C#中is與as的區別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中is與as的區別剖析正文
本文實例剖析了C#中is與as的區別,分享給大家供大家參考。詳細剖析如下:
一、C#類型的轉換
在c#中類型的轉換分兩種:顯式和隱式,根本的規則如下:
1、基類對象轉化為子類對象,必需顯式轉換,規則:(類型名) 對象。
2、值類型和援用類型的轉換采用裝箱(boxing)或拆箱(unboxing).
3、子類轉化為基類對象。
4、根本類型相互之間轉化可以用Covent類來完成。
5、字符串類型轉換為對應的根本類型用Parse辦法,除了String類型外其他的類型都可以用Parse辦法。
6、用GetType可以獲得對象的准確類型。
7、子類轉化為基類,采用隱式轉換。
二、C#中的is
反省一個對象能否兼容於其他指定的類型,並前往一個Bool值,假如一個對象是某個類型或是其父類型的話就前往為true,否則的話就會前往為false。永遠不會拋出異常
假如對象援用為null,那麼is操作符總是前往為false,由於沒有對象可以反省其類型。
例如
object o = new object();
if (o is Label)
{
Label lb = (Label)o;
Response.Write("類型轉換成功");
}
else
{
Response.Write("類型轉換失敗");
}
三、C#中as的轉換規則
1、反省對象類型的兼容性,並前往轉換後果,假如不兼容則前往null;
2、不會拋出異常;
3、假如後果判別為空,則強迫執行類型轉換將拋出NullReferenceException異常;
4、用as來停止類型轉換的時分,所要轉換的對象類型必需是目的類型或許轉換目的類型的派生類型
例如
object o = new object();
Label lb = o as Label;
if (lb == null)
{
Response.Write("類型轉換失敗");
}
else
{
Response.Write("類型轉換成功");
}
運用as操作符有如下幾點限制
第一個就是,不必在類型之間停止類型轉化,即如下編寫就會呈現編譯錯誤。
NewType newValue = new NewType();
NewType1 newValue = newValue as NewType1;
第二個就是,不能使用在值類型數據,即不能如下寫(也會呈現編譯錯誤)。
object objTest = 11;
int nValue = objTest as int;
四、as與is的區別
1、AS在轉換的同事兼判別兼容性,假如無法停止轉換,則 as 前往 null(沒有發生新的對象)而不是引發異常。有了AS我想當前就不要再用try-catch來做類型轉換的判別了。因而as轉換成功要判別能否為null。
2、AS是援用類型類型的轉換或許裝箱轉換,不能用與值類型的轉換。假如是值類型只能結合is來強迫轉換
3、IS只是做類型兼容判別,並不執行真正的類型轉換。前往true或false,不會前往null,對象為null也會前往false。
4、AS形式的效率要比IS形式的高,由於借助IS停止類型轉換的化,需求執行兩次類型兼容反省。而AS只需求做一次類型兼容,一次null反省,null反省要比類型兼容反省快。
五、在停止類型轉換的時分,可以依照如下的方式停止選擇
1、Object => 已知援用類型
運用as操作符來完成
2、Object => 已知值類型
先運用is操作符來停止判別,再用類型強轉方式停止轉換
3、已知援用類型之間轉換
首先需求相應類型提供轉換函數,再用類型強轉方式停止轉換
4、已知值類型之間轉換
最好運用零碎提供的Convert類所觸及的靜態辦法
六、(int)和Int32.Parse(),Convert.ToInt32()三者的區別
1、(int)轉換:用在數值范圍大的類型轉換成數值范圍小的類型時運用,但是假如被轉換的數值大於或許小於數值范圍,則失掉一個錯誤的後果,應用這種轉換方式不能將string轉換成int,會報錯。
2、Int32.Parse()轉換:在契合數字格式的string到int類型轉換進程中運用,並可以對錯誤的string數字格式的拋出相應的異常。
3、Convert.ToInt32()轉換:運用這種轉換,所提供的字符串必需是數值的無效表達方式,該數還必需不是溢出的數。否則拋出異常。
希望本文所述對大家的C#順序設計有所協助。