c# as與is的區別(不是原創)


在c#語言中關於類型的判斷與轉換有is和as這2種操作符,具體用法如下:

    is檢查一個對象是否兼任與指定的類型,並返回一個Boolean值:true或false,主要,is操作符永遠不會拋出異常,一下代碼進行了演示:

            object o = new object();
            Boolean b1=(o is object);    //b1為true
            Boolean b2 = (o is Boolean); //b1為false

  如果對象引用是Null,is操作符總是返回false,因為沒有可檢查其類型的對象。

  is操作符同城像下面這樣使用

if(o is Emplyoee){
   Employee e(Employee) o;  在if語句剩余的部分中使用e
}

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

Employee e=o as Employee
if(e !=null){
    //在if語句中使用e
}

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

    as操作符的工作方式與強類型轉換一樣,只是它永遠不會拋出一個異常——相反,如果對象不能轉型,結果就是null,所以,正確的做法是檢查最終生成的引用是否為null


免責聲明!

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



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