日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中的is和as操作符

發布時間:2025/7/25 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中的is和as操作符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在C#語言中進行類型轉換的操作符is和as。is和as都是強制類型轉換,但這兩者有什么相同之處和不同之處呢?在使用is和as需要注意哪些事項?下面我們從簡單的代碼示例去探討這個簡單的問題。注:此博文只是本人學習過程中一些簡要記錄,新手可以看一下,高手略過。

is檢查一個對象是否兼容于指定的類型,并返回一個Boolean值:true或者fasle。注意,is操作符永遠不會拋出異常,請看以下示例:

ClassA

{

....?

}

Object o=new Object();

Boolean b1=(o is Object); //b1為true.?

Boolean b2=(o is ClassA) ; b2為false.

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

?is 操作符通常像下面這樣使用:

if(obj is ClassA)

{

??? ClassA a=(ClassA) obj;

?? ...?

?}

?在這一段代碼中,CLR實際會檢查兩次對象類型。is操作符首先核實obj是否兼容于ClassA 類型。如果是,那么在if語句內部執行類型轉換時,CLR再次核實obj是否引用一個ClassA。CLR的類型檢查增強了安全性,但也會對性能造成一定的影響。這是因為CLR首先必須判斷(obj)引用的對象的實際類型。然后CLR必須遍歷繼承層次結構,用每個基類型去核對指定的類型(ClassA)。

實際系統開發中,這是一個相當常用的編程模式,于是C#有了操作符as。

as與is做差不多的事情,類型顯式強制轉換。

as操作符的工作方式與強制類型轉換一樣,只是它永遠不會拋出一個異常——相反,如果對象不能轉換,結果就是null。

?

但as有其不同的地方,簡化代碼,同時提升性能。

請看示例代碼:?

Object obj=new Object();?

ClassA a= obj? as ClassA;

?if(a!=null)? //在if判斷a是否為null

{

...

}

在這一段代碼中,CLR核實obj是否兼容于ClassA類型,如果是,as會返回對同一個對象的一個非null引用;

如果obj不兼容ClassA類型,as操作符會返回null。

因此,as操作符使CLR只檢驗一次對象的類型。

if語句只是檢查a是否為null。這個檢查的速度比檢驗對象的類型快得多。

所以正確做法是檢查最終生成的引用是否為null。如果企圖直接使用最終生成null的引用,會拋出一個 NullReferenceException異常。

?示例代碼:

Object obj=new Object(); //創建一個object對象.

ClassA a =obj as ClassA;//將obj轉型為ClassA,此時轉型操作會失敗,不會拋出異常,但a會被設為null.

a.ToString();//訪問a會拋出一個NullReferenceException異常。?

轉載于:https://www.cnblogs.com/BrokenIce/p/5822163.html

總結

以上是生活随笔為你收集整理的C#中的is和as操作符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。