C#中的is和as


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。這個檢查速度比校驗對象的類型快得多。

實際中其實可以這么寫:

public class Program
{
    static void Main(string[] args)
        {
            Object o = new Test();
            if (o is Test test)
            {
                var a = test.Age;
             }
            Console.ReadKey();
        }  
}

public   class Test
{
    public int Age
}          

反編譯后發現:原本寫的是is,反編譯后代碼是as。並且會自動判斷能否裝換成功,能成功,則返回轉換后的對象賦給test。


免責聲明!

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



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