C 中is與as的區別分析

2022-07-10 04:00:14 字數 2235 閱讀 4286

這篇文章主要介紹了c#中is與as的區別,較為詳細的分析了is與as的原理與特性及用法區別,具有很好的學習借鑑價值,需要的朋友可以參考下

一、c#型別的轉換

在c#中型別的轉換分兩種:顯式和隱式,基本的規則如下:

1、基類物件轉化為子類物件,必須顯式轉換,規則:(型別名) 物件。

2、值型別和引用型別的轉換採用裝箱(boxing)或拆箱(unboxing).

3、子類轉化為基類物件。

4、基本型別互相之間轉化可以用covent類來實現。

5、字串型別轉換為對應的基本型別用parse方法,除了string型別外其他的型別都可以用parse方法。

6、用gettype可以取得物件的精確型別。

7、子類轉化為基類,採用隱式轉換。

二、c#中的is

檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,如果乙個物件是某個型別或是其父型別的話就返回為true,否則的話就會返回為false。永遠不會丟擲異常

如果物件引用為null,那麼is操作符總是返回為false,因為沒有物件可以檢查其型別。

例如 **如下:

object o = new object();

if (o is label)

else

三、c#中as的轉換規則

1、檢查物件型別的相容性,並返回轉換結果,如果不相容則返回null;

2、不會丟擲異常;

3、如果結果判斷為空,則強制執行型別轉換將丟擲nullreferenceexception異常;

4、用as來進行型別轉換的時候,所要轉換的物件型別必須是目標型別或者轉換目標型別的派生型別

例如 **如下:

object o = new object();    

label lb = o as label;    

if (lb == null)

else

使用as操作符有如下幾點限制

第乙個就是,不用在型別之間進行型別轉化,即如下編寫就會出現編譯錯誤。

**如下:

newtype newvalue = new newtype();

newtype1 newvalue = newvalue as newtype1;

第二個就是,不能應用在值型別資料,即不能如下寫(也會出現編譯錯誤)。

**如下:

object objtest = 11;

int nvalue = objtest as int;

四、as與is的區別

1、as在轉換的同事兼判斷相容性,如果無法進行轉換,則 as 返回 null(沒有產生新的物件)而不是引發異常。有了as我想以後就不要再用try-catch來做型別轉換的判斷了。因此as轉換成功要判斷是否為null。

2、as是引用型別型別的轉換或者裝箱轉換,不能用與值型別的轉換。如果是值型別只能結合is來強制轉換

3、is只是做型別相容判斷,並不執行真正的型別轉換。返回true或false,不會返回null,物件為null也會返回false。

4、as模式的效率要比is模式的高,因為借助is進行型別轉換的化,需要執行兩次型別相容檢查。而as只需要做一次型別相容,一次null檢查,null檢查要比型別相容檢查快。

五、在進行型別轉換的時候,可以按照如下的方式進行選擇

1、object => 已知引用型別

使用as操作符來完成

2、object => 已知值型別

先使用is操作符來進行判斷,再用型別強轉方式進行轉換

3、已知引用型別之間轉換

首先需要相應型別提供轉換函式,再用型別強轉方式進行轉換

4、已知值型別之間轉換

最好使用系統提供的convert類所涉及的靜態方法

六、(int)和int32.parse(),convert.toint32()三者的區別

1、(int)轉換:用在數值範圍大的型別轉換成數值範圍小的型別時使用,但是如果被轉換的數值大於或者小於數值範圍,則得到乙個錯誤的結果,利用這種轉換方式不能將string轉換成int,會報錯。

2、int32.parse()轉換:在符合數字格式的string到int型別轉換過程中使用,並可以對錯誤的string數字格式的丟擲相應的異常。

3、convert.toint32()轉換:使用這種轉換,所提供的字串必須是數值的有效表達方式,該數還必須不是溢位的數。否則丟擲異常。

C 中String與string的區別分析

一 區別分析 string 類,system.string string 型別,變數 兩者本質上yfsyvbtck沒有任何區別,都是system.string,string只是system.string的別名而已 唯一的區別在於如何按照 約定的來寫,如宣告變數時使用小寫string,使用system...

C 中類與結構的區別例項分析

一 基本概念 類 引用型別,儲存在堆中,棧中儲存引用位址,在方法的傳輸中只是傳輸位址的引用,修改指向的物件會影響原有物件的值,傳輸中消耗記憶體小。結構 值型別,儲存在堆疊中,傳輸過程中傳輸整個物件的副本,修改指向物件的值不會影響原有的物件,傳輸中消耗記憶體大。二 例項 如下 class progra...

C 中 與 的區別

看過一些文章,關於這個的簡單而容易被忽略的語法,說的總有點瑕疵。貼 15秒之內應該能知道c 中乙個 和兩個 的區別,開始計數了.5秒看 namespace test927demo onemethod twomethod console.writeline c 乙個 符號的作用是 console.wr...