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

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

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

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操做符,目的就是簡化這種代碼的寫法,同時提高其性能。code

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,因此,正確的作法是檢查最終生成的引用是否爲nullblog

相關文章
相關標籤/搜索