注册 登录
编程论坛 C# 论坛

关于基类和派生类对象的问题

西安郑鑫 发布于 2014-02-10 18:11, 512 次点击
今天突然看到这个有点懵((Employee)m1).Name = "Mary";然后发现这是把派生类对象转换为基类对象,以前还没见过基类和派生类对象之间转换,请问基类对象可以转换为派生类对象吗?如果是大神就请讲解全面些,谢谢~~~
3 回复
#2
TonyDeng2014-02-10 20:10
這不叫轉換,是把對象視爲什麽類的問題。C的“强制轉換”稱呼誤導了多少人——其實C/C++本身這個操作都不是什麽轉換。
#3
TonyDeng2014-02-10 20:22
你舉例的這句代碼,其實是很無聊的,可以說毫無意義:

1.如果基類本身沒有Name字段或屬性,那麽你把子類對象m1强制視爲基類對象,就會出現基類沒有相關字段或屬性的錯誤;
2.如果子類已繼承有Name,那麽就不需要這樣轉換看法;
3.如果基類有Name字段或屬性,但子類沒有繼承,這樣這個代碼才有絲毫意義,但這又違反了類原則,屬於侵入它類内部讀寫數據的問題,因爲該子類既然沒有繼承這個東西,必定有其考慮,你這樣做是無視原先的設計,并假設自己很瞭解基類的内部構造,强行寫入本對象沒有分配空間的數據,過後這個m1對象將仍然找不到這個值。我沒測試過這種寫法到底有什麽現象,但絕對不會寫出這樣的代碼,所以不需要考究它的後果,不會深入探究。
#4
wangnannan2014-02-11 15:28
这东西我告诉你实际项目中很少有这么写 也就是书里的大师爱这么玩花活
1