作者tomex (tomex_ou)
看板C_Sharp
標題[問題] 物件轉型別(大轉小)的損失?
時間Wed May 25 19:54:12 2005
當浮點數大->小作型別強制轉換時,我們知道損失了小數點後的值:
float f = 1.2L;
int i = (int)f;
而所有的類別/物件都是從object繼承而來的,
string s = "ABC";
object o = (object)s;
string s1 = (string)o;
s->s1中間,損失的又是什麼呢?
ps.
我曾質疑為何compiler要允許物件大轉小呢?
後來看書,寫說:
人->我,所以我=人,人=我
只是不清楚轉換間的損失是啥罷了...
在猜,是否繼承的物件之延伸的變數/methods被隱住了,
但實質位址並沒有消失
因此物件的大小轉換,其實只是遮住而非消滅多出來的東西?!
因為對於ref type的物件而言,
等號(=)是新物件的r-value指向同一個物件heap位址
並沒有作真正的資料異動,因此轉換回來沒有損失。
不知我想得對不對?!
--
貫徹分享精神
我為人人,人人為我
※ 編輯: tomex 來自: 60.248.89.46 (05/25 19:57)
推 cplusplus:沒有損失啊...轉換頂多損失效率~ 140.115.205.46 05/25
→ cplusplus:因為轉換必須type checking~ 140.115.205.46 05/25
→ cplusplus:實際上 的確REF TYPE 如你所說 但是所謂大轉小 140.115.205.46 05/25
→ cplusplus:好難說 這是oo的一種概念...不是什麼"大小"... 140.115.205.46 05/25
推 liunate:我也很想知道 =X 211.74.98.216 05/26