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