C#中實現多繼承的方式:混合+介面

來源:互聯網
上載者:User

有如下結構的代碼:

其中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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.