C#的 is 和 as 類型轉換


  C#在操作類型轉換時,提供了 as 和 is , 顯式,隱式類型轉換,由於顯式和隱式類型轉換比較容易理解,這里主要介紹下 is 和 as 的轉換。

1. is  轉換

    is 操作符指定一個對象類型是否兼容於所指定的類型,返回的是 Bollen 值,true 或false, is 操作符永遠不會拋出異常。如果引用的對象是null, is 操作符總是返回false,因為沒有可檢查其類型的對象。

  Object o= new Object();

 Boolean b1= (o is object);

 Boolean b2=(o is Employee);

  

 if(o is Employee){

 Employee e= (Employee)o;
}

  在這段if 代碼中,CLR 實際上會檢查兩次對象的類型,is 操作符首先核實o是否兼容於Employee類型,如果是,那么if語句內部執行轉換時,CLR 會再次核實o是否兼容於 Employee 類型,CLR 的類型檢查增強的安全性,但無疑也會對性能造成一定影響,這是因為,CLR 必須首先判斷變量o引用的對象的實際類型,然后CLR 必須遍歷繼承層次結構,用每個基類型去核對指定的類型(Employee),由於這是一種相當常用的編程模式,所以C#專門提供了as 操作符,目的就是簡化這種代碼的寫法,同時提升性能。

 

2. as 轉換符

 as 操作符的工作方式與強制類型轉換一樣 ,只是它永遠不會拋出一個異常,如果對象不能轉換,結果就是null,強制轉換則會拋出異常。以下為示例:

Employee e = o as Employee;

if(e !=null){

 //要實現的業務邏輯

}

   在這段代碼中, CLR 核實o 是否兼容於Employee, 如果是,as 會返回對同一對象的一個非null 引用 ,如果o 不兼容於Employee 類型,as 操作符會返回null,值 得注意的是 as 操作符造成CLR 只校驗一次對象的類型,if語句只是檢查e是否為null, 這樣的檢查速度比校驗對象的類型快的多。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM