我正在构建一个相对简单的应用程序,并且对更好的设计实践有点困惑。
我有一个主类MClass。类Child1和Chil2都继承自MClass。现在,还有另一个类AClass,它可以从Child1或Child2继承,但不能同时继承(只有通过,我相信,接口)。
如何从一个或另一个类中获得此可选继承?
还有AChild1和AChild2类,它们都继承自AClass。最终结果如下:
MClass:Child1:ACLASS:AChild1
MClass:CHILD2:ACLASS:AChild2
这是唯一可能的两个选项。简单地将AClass与其子项
结合起来更好MClass:Child1:AClass1
MClass:CHILD2:AClass2
我可以做到这一点,但AClass1和AClass2会有很多冗余字段......任何推荐?
谢谢!
编辑:
具体情况如下:
我有一件可以是Type1或Type2的装备。 Class Equipment有很多属性。 Type1和Type2有自己的属性,它们继承自Equipment。 Type1和Type2都有电缆。有一类具有特定属性的电缆。此外,Type1和Type2具有不同类型的电缆,CableType1 CableType2,它们具有自己的特定属性并从Type1或Type2继承字段。
答案 0 :(得分:3)
VB.NET不允许多重继承。根据您的具体用例,您可以执行各种操作:
MClass
中。这又取决于具体情况不幸的是,你没有给我们一个具体的例子,所以很难说你的情况最好。很可能这些技术的组合将产生最佳结果。
答案 1 :(得分:1)
正如有人已经提到的,.NET不支持多重继承。话虽这么说,类可以实现多个接口,或者接口可以继承多个接口,这与扩展方法一起提供了一种分享实现的好方法。这与多重继承类似,与mixin类似,但效果基本相同。
如果您根据接口重新考虑您的模型,您可以在多重继承方面做您想做的事情。实现类只是POCO,实现逻辑是扩展方法形式的静态方法。
对于封装,您可以使用explicit interface implementation在实现类上实现某些属性,以便在使用类本身时某些属性不可见。
我发现使用这种技术可以提高测试性并防止大量耦合。