C#中實(shí)現(xiàn)多繼承的方式:混合+接口
有如下結(jié)構(gòu)的代碼:
其中Parent的ApplyEditable是一個(gè)Virtual方法,Child要對(duì)其進(jìn)行各自不同的實(shí)現(xiàn),即重寫ApplyEditable方法。
上述代碼中,很明顯ParentA和ParentB有重復(fù)代碼。但是由于C#不支持多繼承,所以無法使用多繼承的方式把這些重復(fù)代碼封裝起來。
我們只有走變通的道路:經(jīng)過我的實(shí)踐,使用混合+接口的方式。可以比較好的實(shí)現(xiàn)多繼承。
我們還是直接來看圖:
具體的解決步驟是:
1.把之前在ParentA和ParentB中公共的代碼封裝到BaseC中,并作為Parent的一個(gè)屬性。
2.把需要重寫的方法ApplyEditable定義到一個(gè)接口IBaseCAction中。(實(shí)際上,如果只有一個(gè)方法需要重寫的話,可以不用定義接口,直接在BaseC中定義一個(gè)Action的委托變量就可以了。當(dāng)然定義接口更方便支持多個(gè)重寫方法。)
3.讓ChildA和ChildB實(shí)現(xiàn)IBaseCAction接口,并分別實(shí)現(xiàn)ApplyEditable的不同代碼。
4.在Child類的構(gòu)造器中,把自己傳給BaseC的實(shí)例化,即this.BaseC = new BaseC(this);
我就不貼代碼了,完整的源代碼下載地址為:http://cid-f73516baeac50992.skydrive.live.com/self.aspx/SharedCode/MultiDerived.zip
【編輯推薦】