在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的可訪問基類 直接或間接 時,下面的語句才將乙個...