有如下結構的程式碼:

其中 Parent 的 ApplyEditable 是一個 Virtual 方法,Child 要對其進行各自不同的實現,即重寫 ApplyEditable 方法。
上述程式碼中,很明顯 ParentA 和 ParentB 有重複程式碼。但是由於 C# 不支援多重繼承,所以無法使用多重繼承的方式把這些重複程式碼封裝起來。
我們只有走變通的道路:經過我的實踐,使用混合 + 介面的方式。可以比較好的實現多重繼承。
我們還是直接來看圖:

具體的解決步驟是:
ParentA 和 ParentB 中公共的程式碼封裝到 BaseC 中,並作為 Parent 的一個屬性。ApplyEditable 定義到一個介面 IBaseCAction 中。(實際上,如果只有一個方法需要重寫的話,可以不用定義介面,直接在 BaseC 中定義一個 Action 委派變數就可以了。當然定義介面更方便支援多個重寫方法。)ChildA 和 ChildB 實作 IBaseCAction 介面,並分別實現 ApplyEditable 的不同程式碼。Child 類別的建構函式中,把自己傳給 BaseC 的實例化,即 this.BaseC = new BaseC(this);。