Re: [問題] 不能多重繼承的話,這問題怎麼解?

看板C_Sharp作者 (睡魔)時間15年前 (2010/08/21 22:27), 編輯推噓3(304)
留言7則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《SDNiceBoat (NiceBoat.)》之銘言: : 例如: : class A: : { : public virtual void FunA() : { : //---------- : } : } : class B:List<A>,A ← 會出錯,因為不能多重繼承 : { : public override void FunA() : { : foreach(A a in this) : { : a.FunA(); : } : } : } : ==================================================== : 主要是希望能把B class 放進另一個B class當中 : 讓他可以變成巢狀結構 : 請問該怎麼做? : 雖然可以用介面去解 : 但萬一裡面的東西一多的話,會有一堆重複的程式碼..... : 實作起來跟之後要修改都會很麻煩.... 你需要的是default property... using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { public class A { public virtual void FuncA() { } } public class B : A { protected List<A> _item; // 這裡看你想這樣還是implement一堆forwarder // 把List<A>中需要的method expose出來 public List<A> CollA { get { return this._item; } } public A this[int index] { get { return this._item[index]; } set { this._item[index] = value; } } } } -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.92.4.195 ※ 編輯: leicheong 來自: 61.92.4.195 (08/21 23:33)

08/22 00:53, , 1F
可是,我是想直接把List的功能繼承下來,而不是重新寫
08/22 00:53, 1F

08/22 00:54, , 2F
重新寫List的工作會比繼承介面的方法來的浩大......
08/22 00:54, 2F

08/22 01:00, , 3F
總而言之,還是謝謝回答
08/22 01:00, 3F

08/22 09:25, , 4F
那沒解了, 你看XmlNode也是用一堆Interface來做的.
08/22 09:25, 4F

08/22 09:27, , 5F
這也算是簡化語言結構的代價吧... (就像functional
08/22 09:27, 5F

08/22 09:28, , 6F
programming不能直接轉寫某些常用pattern一樣)
08/22 09:28, 6F

08/22 11:32, , 7F
瞭解了 感謝.....
08/22 11:32, 7F
文章代碼(AID): #1CR-8zkk (C_Sharp)
文章代碼(AID): #1CR-8zkk (C_Sharp)