2014-02-12 27 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应该完成它。