我們都知道clr最重要的乙個特性就是型別安全,它在執行時就知道物件型別。
但我們會經常用到將一種型別轉換成另一種型別,clr也允許將物件轉成他的實際型別,或者是它的基型別。
在c#中,支援隱士轉換成它的基型別。
型別轉換會用到以下方式:
1public
class
entitybase24
}5public
class
user68
}910.....
11public
static
void
main()
12
其中(user) obj用了強制轉換,如果原始型別不是user的時候,會丟擲異常。
而obj as user會先判斷型別,然後才會轉換,如果原始型別不是user的時候,會返回null,反而不會丟擲異常。
有的時候為了處理異常,需要加一些判斷,比如使用如下判斷語句,先判斷型別是否正確:
1if(obj is
user)
這樣也可以實現,但是我們可以換另外一種給方式去寫,會更簡單。
因為對obj as user而言 會先判斷型別,然後才會轉換,那這樣的話就會跟外層的is語句有重複判斷的部分,在單條語句不會引起很大的效能方面的損耗,但是如果在乙個比較大的迴圈語句中這樣大量的重複判斷,效能損耗將是乙個很大的影響。
1var user3 = obj as
user;
2if(user3 is
null)3
如上寫法,依據as語法的特性,判斷返回結果的方式。
淺學CLR via C 筆記之型別轉換
我們都知道clr最重要的乙個特性就是型別安全,它在執行時就知道物件型別。但我們會經常用到將一種型別轉換成另一種型別,clr也允許將物件轉成他的實際型別,或者是它的基型別。在c 中,支援隱士轉換成它的基型別。型別轉換會用到以下方式 1 public class entitybase24 5public...
CLR via C 學習筆記 型別
類的記憶體分配 關鍵字 abstract 類 該類不能構建例項 方法 屬性 事件 表示構建派生型別的例項之前派生型別必須重寫並實現這個成員 常量 字段 不允許 virtual 類 不允許 方法 屬性 事件 表示這個成員可以由派生類重寫 常量 字段 不允許 override 類 不允許 方法 屬性 事...
型別基礎 CLR Via C 筆記一
一.所有型別都是從system.obejct派生 1.下面兩個型別定義是完全一致的 1 class employee 4class employee system.object 2.system.object的公共例項方法 a.equals 判斷物件是否具有相等的值 b.gethashcode 返回...