1. 程式人生 > >C#中的is和as

C#中的is和as

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