2014-02-12 41 views
0

比方說,我有以下類別:C#inheritahce混合/匹配

public class A 
{ 
    public string a {get; set;} 
} 

public class B 
{ 
    public int b {get; set;} 
} 

public class C 
{ 
    public DateTime {get; set;} 
} 

...等等。如果我有多重繼承,我可以做的是:

public class AC : A, C {} 
public class BD : B, D {} 
public class ACD : AC, D {} 

...其中子類將繼承父類的屬性。假設這種情況只涉及屬性,並且沒有重複屬性。在C#中,沒有多重繼承的東西,所以我上面的符號不起作用。我也知道接口不會購買任何東西,因爲接口只需要實現類實現屬性(我們現實世界問題中的屬性也都有註釋,而且不能放入接口)。

目前,我們正在通過將遺傳串聯在一起解決問題,但我們希望更靈活一些。而我們唯一能想到的另一種選擇是複製/粘貼(顯然不是最佳的)。任何解決這個難題的戰略思路?

+4

你是否嘗試過構圖而不是繼承? – Jay

+2

@Jay右邊他可以有公共類AC {public AC(A a,C c){...}}',然後設置一些本地公共屬性A,C.如果需要的話,他可以填補這一切依賴注入。 –

+1

串聯遺傳是什麼意思?如果你添加更多的物質更接近你的現實世界的例子,它可能會有所幫助。另外,您當前的解決方案有何問題?即您需要更多靈活性的方式? –

回答

1

嘗試編寫您的類,以便您的新類具有A類屬性,B類屬性等等。

您可以更進一步,使組成類的邏輯可以成爲組成類的外觀。

有一個偉大的SO張貼關於在這裏:​​https://stackoverflow.com/a/53354/685341

0

你有這取決於你正在努力實現多繼承什麼三個選項:

  1. 使用的界面,實現對抽象接口基類。通過適當使用正常的OO模式(即正確使用基本實現和抽象屬性來強制擴展類來實現),您可以通過該選項獲得多繼承的大部分方法。

  2. 組成。創建一個包裝所需的子類(基類)的類。你不必包裝所有的子類,你仍然可以使用繼承來實現一些類的定義。在這種情況下,類AC可以擴展(繼承自)A並且還包裝C

  3. 使用接口組成

前兩次都沒有的混合物,是一個非常乾淨的解決方案,既會得到你最的方式存在。現實情況是,你確實需要多重繼承的情況很少,如果你確實需要多重繼承,那麼選項3應該完成它。