條款3 操作符is或as優於強制轉換

2021-04-13 00:14:22 字數 383 閱讀 3511

對於型別轉換通常有兩種選擇:使用as操作符;強制轉換。另外還有一種比較保險的做法:先用is來做乙個轉換測試,然後在使用as或強制轉換。

as和is操作符都不執行任何使用者自定義的轉換,而且只能用於引用型別。對於值型別只能使用強制轉換。

編譯器在產生**是依據變數編譯時的型別,對其執行時的型別一無所知,當進行型別轉換時,編譯器檢視其相容性、有沒有使用者自定義轉換 ,若都不成立則編譯器產生**來檢查該變數執行時的型別並於目標變數進行比較,如果相等或相容,則轉換成功,否則失敗。此處,使用者自定義轉換操作符只作用於物件的編譯時型別,而非執行時型別上

在foreach中使用的是強制型別轉換,因為每次current物件都是object型別。

一般情況下不要使用強制型別轉換,他們可能帶來意想不到的負面效應。

邏輯或操作符

邏輯或操作符 邏輯或操作符,相當於生活中的 或者 當兩個條件中有任乙個條件滿足,邏輯或 的運算結果就為 真 例如 本週我們計畫出遊,可是周一至周五工作,所以週六或者週日哪天去都可以。即兩天中只要有一天有空,就可以出遊了。var a 3 var b 5 var c c b a a b b a是true...

強制型別轉換操作符

操作符 中文名稱 含義 dynamic cast 動態型別轉換符 支援多型而存在,主要用於類之間的轉換 static cast 靜態型別轉換符 僅僅完成編譯時期的轉換檢查 reinterpret cast 再解釋型別轉換符 完成不同型別指標之間的相互轉換 const cast 常型別轉換符 用來修改...

過載操作符(3)

過載關係操作符 class object 過載型別轉換符 class object 過載輸入輸出操作符 logger operator type value 1 名稱 operator 2 返回值 左值,一般返回物件自己 3 引數 待輸出的資料 例如 class logger logger oper...