C#中的is和as
阿新 • • 發佈:2018-05-02
div 實際類型 基類 每一個 對象類型 提升 異常 將在 校驗
is檢查一個對象是否兼容於指定的類型,不返回Boolean值。註意is操作符永遠不會拋異常。is操作符通常這樣使用:
if(o is Employee) { Employee e=(Employee) 0; //其他處理... }
在這段代碼中,CLR實際會檢查兩次對象類型。is操作符首先核實o是否兼容於Employee類型。如果是,將在if語句內部再次核實o是否引用一個Employee。CLR的類型檢查增強了安全性,但無疑也對性能造成一定影響。這是因為CLR首先必須判斷變量(o)引用的對象的實際類型。然後,CLR必須遍歷繼承層次結構用每一個基類型去核對指定的類型。這是一個相當常用的編程模式,所以C#專門提供了as操作符,目的簡化這種代碼的寫法,同時提升其性能。
Employee e=o as Employee; if(e!=null) { //後續其他處理 }
在這段代碼中,CLR核實o是否兼容於Employee類型;如果是,as會返回對同一個對象的一個非null引用。如果不兼容,返回null。as操作符造成CLR只校驗一次對象的類型。if語句只是檢查e是否為null。這個檢查速度比校驗對象的類型快得多。
C#中的is和as