[問題] 繼承 List<T>消失

看板C_Sharp作者時間18年前 (2008/04/06 16:20), 編輯推噓4(404)
留言8則, 6人參與, 最新討論串1/1
我有一個 class A 繼承了 List<B> ,然後加了幾個方法進去 class A : List<B> { public void func() { ... } } 但繼承自 List<B> 的方法仍然是回傳 List<B> 的物件,例如: List<B> List<B>.GetRange(int index, int count); 這會導致我無法像用下列方式使用物件: A item = new A(); item.GetRange(a,b).func(); 因為 item.GetRange(a,b) 回傳 List<B> ,若不經 cast 成 A 的話自然無法使用 定義在 class A 裡面的 func(),所以要寫成: ((A)item.GetRange(a,b)).func(); 可是這樣又很醜,我也不想重新包裝 List<B> 中的每一個方法, 不知有什麼解決方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc)

04/06 18:12, , 1F
override GetRange?
04/06 18:12, 1F

04/07 09:31, , 2F
GetRange不是abstract或virtual 要用new關鍵字複寫
04/07 09:31, 2F

04/07 10:34, , 3F
return type不同不能 override 吧 .__."
04/07 10:34, 3F

04/07 20:07, , 4F
你需要"樣板繼承", 而 C# 不支援, 請改用 Haskell XD
04/07 20:07, 4F

04/08 08:07, , 5F
C# 3.0 可以用 Extension Method 解決這個問題
04/08 08:07, 5F

04/09 19:45, , 6F
謝謝樓上 extension method 確實解決了我的問題
04/09 19:45, 6F

04/09 19:45, , 7F
考慮把專案改成 C# 3.0 中...
04/09 19:45, 7F

04/09 19:46, , 8F
也謝謝一到四樓的幫忙
04/09 19:46, 8F
文章代碼(AID): #17-8V1pv (C_Sharp)