型別轉換(C AS OR IS 運算子)

2021-05-08 09:35:32 字數 1278 閱讀 3724

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

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

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

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

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

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

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

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

下面來說說as和is操作符。

as:用於在相容的引用型別之間執行轉換。

is:檢查物件是否與給定型別相容

從概念來分析:

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

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

object bjtest = 11;

if( objtest is int )

else

system.console.writeline("error 2!");

平時自己也多用這種方式來做型別轉化的,但今天看了個文章,對比了另外一種方式,as操作符進行轉換,才知道as比is可以稍微地提高效能的。

class2 cls2 = cls1 as class2;

if (cls2!=null)

system.console.writeline("ok");

else

system.console.writeline("error!");

as稍微不同,它檢查引用物件是否相容,如果不相容則返回null,因此需要做null的判斷。

對比兩種方式,is需要做兩次物件的型別檢查,而as需要做一次物件型別檢查,再加一次null的檢查,而null檢查開銷比物件型別檢查少。相對as的方法效率高些。

c#中問號的用法(非表示式)---單問號,雙問號

單問號---用於給變數設初值的時候,給變數(int型別)賦值為null,而不是0!

雙問號---用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦乙個新值,否則跳過!

public int? para;

//public int para;如果不注釋掉此行,而把上一行注釋掉的話,下面會報錯!

public int par()

型別轉換運算子

在程式設計過程中,我們經常需要把一種型別轉換為另外一種型別。在轉換過程中,我們需要關心兩件事情 1。這種型別轉換是否合法?2。轉換得規則如何?c 預設自動支援幾種型別轉換 基礎型別之間的轉換 派生類指標向基類指標的轉換 非常量型別向常量型別的轉換等等。對於其他型別間的轉換,則沒 有規定。舉例來說,c...

型別轉換運算子

在程式設計過程中,我們經常需要把一種型別轉換為另外一種型別。在轉換過程中,我們需要關心兩件事情 1。這種型別轉換是否合法?2。轉換得規則如何?c 預設自動支援幾種型別轉換 基礎型別之間的轉換 派生類指標向基類指標的轉換 非常量型別向常量型別的轉換等等。對於其他型別間的轉換,則沒有規定。舉例來說,cs...

型別轉換運算子

c 中4個型別轉換運算子 可以根據目的選擇乙個適合的運算子,而不是使用通用的型別轉換。用於將派生類指標轉換為基類指標,其主要用途是確保可以安全地呼叫虛函式。假設high和low是兩個類,而ph和pl的型別分別為high 和low 則僅當low是high的可訪問基類 直接或間接 時,下面的語句才將乙個...