[問題] 不同型態物件存在同個List

看板C_Sharp (C#)作者 (dreak)時間11年前 (2014/01/14 17:30), 編輯推噓1(109)
留言10則, 3人參與, 最新討論串1/1
各位好 目前碰到的問題是,我想把不同類型的物件儲存在同個List, 目前的作法如下, 建立一個BaseClass(裡面包含共用的function), 再分別寫A、B、C三個Class繼承BaseClass, 在A、B、C中分別包含了獨立的function(BassClass裡沒有的function), 然後在主程式建立A、B、C這三個物件時,分別塞入List<BaseClass>這個List中, 這樣做看似是可行,但當我想要呼叫A物件裡獨立的function時(BassClass裡沒有), 似乎沒有辦法,請問我這樣的作法是對的嗎?或者有什麼更好的作法? 有什麼方法可以讓我呼叫A物件裡獨立的function? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 42.67.102.9

01/14 18:03, , 1F
關鍵字:list泛型
01/14 18:03, 1F
泛型指得不是我上述的List<BaseClass>嗎?還是我理解有誤? ※ 編輯: dreak 來自: 42.67.102.9 (01/14 18:19)

01/14 20:07, , 2F
你已經指出問題了 BaseClass沒有A的獨立function
01/14 20:07, 2F

01/14 20:08, , 3F
A的Class結構在進去List時已經被轉換了,類似(BaseClass)A
01/14 20:08, 3F

01/14 20:08, , 4F
你只要取出來的時候再轉換回A就好 ((A)List[?]).fun()
01/14 20:08, 4F

01/14 20:09, , 5F
如果你說同時會有ABC的List就比較麻煩了
01/14 20:09, 5F

01/14 20:11, , 6F
編譯時你並不知道他是哪個,建議用GetType搭配Reflection
01/14 20:11, 6F

01/14 20:11, , 7F
當然最簡單的方式就是將abc各自獨立的Fun全部寫進去Base
01/14 20:11, 7F

01/14 20:12, , 8F
然後將Base的fun宣告成virtual讓子類實現
01/14 20:12, 8F

01/14 21:19, , 9F
如果你ABC沒有共通的功能要呼叫,塞在一起有什麼好處?
01/14 21:19, 9F

01/14 23:33, , 10F
華生你突破盲腸炎了
01/14 23:33, 10F
謝謝兩位的回覆,小弟在第一行有說明這隻BaseClass有共用的Function, 不過經過兩位的指點已經有方向了,謝謝。 ※ 編輯: dreak 來自: 42.67.102.9 (01/15 10:01)
文章代碼(AID): #1IrGESw0 (C_Sharp)
文章代碼(AID): #1IrGESw0 (C_Sharp)