此问题已在此处有答案:
十年前就关门了。
可能重复:
Multiple Inheritance in C#
我有A班和B班两个班。这两个类不能互相继承。我创建了一个新的类,叫做Class C。现在,我想通过继承来实现类A和类B中的方法。我知道多重继承在C#中是不可能的,但有没有其他方法可以做到这一点?
此问题已在此处有答案:
十年前就关门了。
可能重复:
Multiple Inheritance in C#
我有A班和B班两个班。这两个类不能互相继承。我创建了一个新的类,叫做Class C。现在,我想通过继承来实现类A和类B中的方法。我知道多重继承在C#中是不可能的,但有没有其他方法可以做到这一点?
7条答案
按热度按时间yqlxgs2m1#
多重继承在C#中是不可能的,但是可以使用接口模拟,参见Simulated Multiple Inheritance Pattern for C#。
基本思想是为类
B
上你想要访问的成员定义一个接口(称之为IB
),然后让C
继承A
,并通过在内部存储B
的示例来实现IB
,例如:在那一页上还有其他几个替代模式的解释。
pqwbnv8z2#
继承的一种常见替代方法是委托(也称为组合):“X”有一个“Y”而不是“X”是一个“Y”。因此,如果类
A
具有处理Foos的功能,类B
具有处理Bars的功能,并且您希望在类C
中同时使用这两种功能,那么您可以这样做:ycl3bljg3#
如果你想真正使用
A
和B
的方法代码,你可以让你的C
类包含每一个的示例。如果你针对A
和B
的接口进行编码,那么你的客户端不需要知道你给他们的是C
而不是A
或B
。jmo0nnb34#
使用composition:
然后你可以调用
C.A.DoA()
。您还可以将属性更改为接口或抽象类,如public InterfaceA A
或public AbstractClassA A
。pxq42qpu5#
创建两个接口
IA
和IB
:接下来让
A
实现IA
,B
实现IB
。然后按如下方式实现C类:
一般来说,这是一个糟糕的设计,因为你可以让
A
和B
实现一个具有相同名称和变量类型的方法,比如foo(int bar)
,你需要决定如何实现它,或者你只是在_a
和_b
上调用foo(bar)
。正如其他地方所建议的那样,您应该考虑.A
和.B
属性,而不是组合这两个类。l3zydbqr6#
你可以为
A
和B
定义一个基类,在这个基类中你可以保存它们的一个 common 方法/属性/字段。实现
C:Base
后。或者为了模拟多重继承,定义一个公共的
interface
(s)并在C
中实现它们希望这能帮上忙。
20jt8wwn7#
你的意思是你想让C类成为A & B的基类吗?