[問題] 父類別轉子類別

看板C_Sharp (C#)作者 (小小)時間9年前 (2015/11/23 23:31), 編輯推噓2(2020)
留言22則, 7人參與, 最新討論串1/2 (看更多)
Class father {} Class child : father {} father f = new child(); Child C1 = (child)f ;//第一種強轉 child C2 = f as child ;//第二種強轉 除了上述兩種強轉外 還有什麼方式可以轉成子類別呢 有沒有動態的方式能轉呢 例如有多種子類別實體 放在父類別的List變數裡 要怎麼依序的將該List轉成子類別呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.154.63 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1448292664.A.149.html

11/23 23:34, , 1F
Foreach(child _child in FatherList)
11/23 23:34, 1F

11/23 23:34, , 2F
你要的是這個嗎
11/23 23:34, 2F

11/23 23:36, , 3F
還是你想把一個有貓有老虎有獅子的List分類出來
11/23 23:36, 3F

11/23 23:40, , 4F
對 那個list有很多不同的子類別 要如轉回到子類別呢
11/23 23:40, 4F

11/23 23:52, , 5F
你想轉回來做什麼? 設計上應該不會用到這件事情才對..
11/23 23:52, 5F

11/23 23:53, , 6F
附註 第二種轉型方式印像中效能會比較好
11/23 23:53, 6F

11/23 23:57, , 7F
如果確定轉換一定成功,第一種效能比較好
11/23 23:57, 7F

11/23 23:57, , 8F
然後需要這樣轉的話,通常設計有問題...
11/23 23:57, 8F

11/24 00:07, , 9F
因為第一種方式就是少了檢查直接轉型 不確定狀況下
11/24 00:07, 9F

11/24 00:07, , 10F
as 會比較安全y
11/24 00:07, 10F

11/24 00:33, , 11F
還是要看轉回來做什麼? 不然實作interface就好啦
11/24 00:33, 11F

11/24 01:36, , 12F
個人覺得有共通方法就用interface沒有就switch + typeof
11/24 01:36, 12F

11/24 01:38, , 13F
11/24 01:38, 13F

11/24 07:48, , 14F
轉回來的原因是要用子類別內宣告的變數
11/24 07:48, 14F

11/24 07:49, , 15F
在父類別那邊看不到子類別自己的東西
11/24 07:49, 15F

11/24 08:47, , 16F
如果變數型別一樣 可以寫個interface 抓出來
11/24 08:47, 16F

11/24 08:48, , 17F
或者寫個function return 出來
11/24 08:48, 17F

11/24 16:18, , 18F
as 效能比較好, http://tinyurl.com/clr68dj
11/24 16:18, 18F

11/24 16:21, , 19F
是共通的功能, 應該要透過 virtual method 提供
11/24 16:21, 19F

11/24 16:27, , 20F
如果要從單獨抽出某個子類別的 object,
11/24 16:27, 20F

11/24 16:28, , 21F
可以透過 List<P>.OfType<C>()
11/24 16:28, 21F

11/26 03:58, , 22F
連結那篇說的有問題,有空再來聊,你要不要自己測測先?
11/26 03:58, 22F
文章代碼(AID): #1MKp4u59 (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1MKp4u59 (C_Sharp)