C#中實(shí)現(xiàn)多繼承的方式:混合+接口
有如下結(jié)構(gòu)的代碼:
其中Parent的ApplyEditable是一個(gè)Virtual方法,Child要對(duì)其進(jìn)行各自不同的實(shí)現(xiàn),即重寫(xiě)ApplyEditable方法。
上述代碼中,很明顯ParentA和ParentB有重復(fù)代碼。但是由于C#不支持多繼承,所以無(wú)法使用多繼承的方式把這些重復(fù)代碼封裝起來(lái)。
我們只有走變通的道路:經(jīng)過(guò)我的實(shí)踐,使用混合+接口的方式。可以比較好的實(shí)現(xiàn)多繼承。
我們還是直接來(lái)看圖:
具體的解決步驟是:
1.把之前在ParentA和ParentB中公共的代碼封裝到BaseC中,并作為Parent的一個(gè)屬性。
2.把需要重寫(xiě)的方法ApplyEditable定義到一個(gè)接口IBaseCAction中。(實(shí)際上,如果只有一個(gè)方法需要重寫(xiě)的話,可以不用定義接口,直接在BaseC中定義一個(gè)Action的委托變量就可以了。當(dāng)然定義接口更方便支持多個(gè)重寫(xiě)方法。)
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
【編輯推薦】