.NET中的 類型轉(zhuǎn)換深入理解
CLR最重要的一個(gè)特性就是類型安全。CLR在運(yùn)行時(shí)總能知道一個(gè)對(duì)象的類型。我們也可以通過調(diào)用GetType()方法,來得到對(duì)象的準(zhǔn)確類型。因?yàn)樵摲椒ㄊ且粋€(gè)非虛方法,所以我們不可能利用它來篡改一個(gè)類型的信息。(Microsoft.NET 框架程序設(shè)計(jì)<修訂版>p117)
我們定義如下類:
public class Employee
{
string name= string.Empty;
float age = -1;
public override string ToString()
{
return "name = "+name +" and age = "+age;
}
}
通過如下代碼:
Employee e = new Employee();
object oe = e as object;
if(oe == null)
{
Console.WriteLine("oe is null");
}
Console.WriteLine("oe's type is : {0}",oe.GetType());
通過以上,應(yīng)該可以明白“CLR在運(yùn)行時(shí)總能知道一個(gè)對(duì)象的類型?!绷?。
as 操作符提供了對(duì)左邊實(shí)例到右邊類型的兼容性檢驗(yàn),如果兼容,即左邊實(shí)例可以轉(zhuǎn)換為右邊類型的對(duì)象,則返回此對(duì)象的引用,否則返回null。除了as操作符之外,C#中還提供了is 操作符,它也提供了對(duì)左邊實(shí)例與右邊類型的兼容性檢驗(yàn),只不過當(dāng)檢驗(yàn)結(jié)果兼容時(shí),它返回的是true,否則返回false,因此,它還需要額外的顯示操作,以完成轉(zhuǎn)換。所以相對(duì)比較起來,as操作符效率更高些。此外,兩個(gè)操作符運(yùn)行過程中,都不會(huì)拋出異常。但是as操作符要求對(duì)轉(zhuǎn)換過的對(duì)象增加是否為null引用的判斷,以防止轉(zhuǎn)換不成功時(shí),對(duì)空引用操作。
由于as操作符在檢驗(yàn)結(jié)果不兼容時(shí),會(huì)返回null,因此,as操作符不可以把實(shí)例與值類型相檢驗(yàn),否則編譯不通過。因?yàn)橹殿愋筒荒苜x值為null(?除外).
相關(guān)文章
ASP.NET Gridview 中使用checkbox刪除的2種方法實(shí)例分享
ASP.NET Gridview 中使用checkbox刪除的2種方法實(shí)例分享,需要的朋友可以參考一下2013-06-06visual studio 2015+opencv2.4.13配置教程
這篇文章主要為大家詳細(xì)介紹了visual studio 2015+opencv2.4.13配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11ASP.NET將文件寫到另一服務(wù)器(圖文教程)及注意事項(xiàng)
有時(shí)我們需要將來自于客戶端的文件上傳到WEB服務(wù)器端,并在服務(wù)端將文件存儲(chǔ)到第三方文件服務(wù)器中存儲(chǔ),既然有需求,那就有實(shí)現(xiàn)了,感興趣的你可以了解此文,或許對(duì)你學(xué)習(xí)asp.net 起到很好的作用哦2013-01-01ASP.Net Post方式獲取數(shù)據(jù)流的一種簡單寫法
這篇文章主要介紹了ASP.Net Post方式獲取數(shù)據(jù)流的一種簡單寫法,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-05-05.net core如何在網(wǎng)絡(luò)高并發(fā)下提高JSON的處理效率詳解
這篇文章主要給大家介紹了關(guān)于.net core如何在網(wǎng)絡(luò)高并發(fā)下提高JSON的處理效率的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.net core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04asp.net在iframe中彈出信息并執(zhí)行跳轉(zhuǎn)問題探討
本代碼將實(shí)現(xiàn)在iframe中彈出信息并執(zhí)行跳轉(zhuǎn),感興趣的朋友可以參考下2013-04-04