在C#中使用扩展方法进行伪多重继承?

Dav*_*vy8 6 extension-methods dry multiple-inheritance c#-3.0

类似的问题,但不完全相同的事情

我认为使用与接口相同的命名空间中的扩展方法,您可以获得与多继承类似的效果,因为您不需要在10个不同的类中以相同的方式实现相同的接口的重复代码.

这样做的一些缺点是什么?我认为专业人士非常明显,这是后来通常会再次咬你的缺点.

我看到的一个缺点是扩展方法不能是虚拟的,因此您需要确保实际上确实希望它们以相同的方式实现每个实例.

tva*_*son 4

我发现通过扩展方法构建接口功能的问题是,您不再实际实现接口,因此无法使用对象作为接口类型。

假设我有一个采用 IBar 类型的对象的方法。如果我通过扩展方法在 Foo 类上实现 IBar 接口,那么 Foo 就不是从 IBar 派生的,并且不能与其互换使用(里氏替换原则)。当然,我得到了我想要添加到 Foo 中的行为,但我首先失去了创建接口的最重要的方面——能够定义一个抽象契约,该契约可以由各种类以多种方式实现,以便依赖类不需要知道具体的实现。

如果我非常需要多重继承(到目前为止我一直没有它),我想我会使用组合来最大程度地减少代码重复量。