[問題] 父類別轉子類別

作者: grace0523 (小小)   2015-11-23 23:31:02
Class father
{}
Class child : father
{}
father f = new child();
Child C1 = (child)f ;//第一種強轉
child C2 = f as child ;//第二種強轉
除了上述兩種強轉外
還有什麼方式可以轉成子類別呢
有沒有動態的方式能轉呢
例如有多種子類別實體
放在父類別的List變數裡
要怎麼依序的將該List轉成子類別呢
作者: TameFoxx (foxx)   2015-11-23 23:34:00
Foreach(child _child in FatherList)你要的是這個嗎還是你想把一個有貓有老虎有獅子的List分類出來
作者: grace0523 (小小)   2015-11-23 23:40:00
對 那個list有很多不同的子類別 要如轉回到子類別呢
作者: bantime (景)   2015-11-23 23:52:00
你想轉回來做什麼? 設計上應該不會用到這件事情才對..附註 第二種轉型方式印像中效能會比較好
作者: Litfal (Litfal)   2015-11-23 23:57:00
如果確定轉換一定成功,第一種效能比較好然後需要這樣轉的話,通常設計有問題...
作者: bantime (景)   2015-11-24 00:07:00
因為第一種方式就是少了檢查直接轉型 不確定狀況下as 會比較安全y
作者: soup514   2015-11-24 00:33:00
還是要看轉回來做什麼? 不然實作interface就好啦
作者: pauliaia   2015-11-24 01:36:00
個人覺得有共通方法就用interface沒有就switch + typeofhttp://stackoverflow.com/questions/1711005 下下方解
作者: grace0523 (小小)   2015-11-24 07:48:00
轉回來的原因是要用子類別內宣告的變數在父類別那邊看不到子類別自己的東西
作者: bantime (景)   2015-11-24 08:47:00
如果變數型別一樣 可以寫個interface 抓出來或者寫個function return 出來
作者: iterator (rotareti)   2015-11-24 16:18:00
as 效能比較好, http://tinyurl.com/clr68dj是共通的功能, 應該要透過 virtual method 提供如果要從單獨抽出某個子類別的 object,可以透過 List<P>.OfType<C>()
作者: Litfal (Litfal)   2015-11-26 03:58:00
連結那篇說的有問題,有空再來聊,你要不要自己測測先?

Links booklink

Contact Us: admin [ a t ] ucptt.com