C#中is與as的差別剖析。本站提示廣大學習愛好者:(C#中is與as的差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中is與as的差別剖析正文
本文實例剖析了C#中is與as的差別,分享給年夜家供年夜家參考。詳細剖析以下:
1、C#類型的轉換
在c#中類型的轉換分兩種:顯式和隱式,根本的規矩以下:
1、基類對象轉化為子類對象,必需顯式轉換,規矩:(類型名) 對象。
2、值類型和援用類型的轉換采取裝箱(boxing)或拆箱(unboxing).
3、子類轉化為基類對象。
4、根本類型相互之間轉化可以用Covent類來完成。
5、字符串類型轉換為對應的根本類型用Parse辦法,除String類型外其他的類型都可以用Parse辦法。
6、用GetType可以獲得對象的准確類型。
7、子類轉化為基類,采取隱式轉換。
2、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("類型轉換掉敗");
}
3、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;
4、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檢討要比類型兼容檢討快。
5、在停止類型轉換的時刻,可以依照以下的方法停止選擇
1、Object => 已知援用類型
應用as操作符來完成
2、Object => 已知值類型
先應用is操作符來停止斷定,再用類型強轉方法停止轉換
3、已知援用類型之間轉換
起首須要響應類型供給轉換函數,再用類型強轉方法停止轉換
4、已知值類型之間轉換
最好應用體系供給的Convert類所觸及的靜態辦法
6、(int)和Int32.Parse(),Convert.ToInt32()三者的差別
1、(int)轉換:用在數值規模年夜的類型轉換成數值規模小的類型時應用,然則假如被轉換的數值年夜於或許小於數值規模,則獲得一個毛病的成果,應用這類轉換方法不克不及將string轉換成int,會報錯。
2、Int32.Parse()轉換:在相符數字格局的string到int類型轉換進程中應用,並可以對毛病的string數字格局的拋出響應的異常。
3、Convert.ToInt32()轉換:應用這類轉換,所供給的字符串必需是數值的有用表達方法,該數還必需不是溢出的數。不然拋出異常。
願望本文所述對年夜家的C#法式設計有所贊助。