c#-3.0 - 在 C# 中的接口(interface)上具有扩展方法的伪多重继承?

标签 c#-3.0 extension-methods dry multiple-inheritance

Similar question but not quite the same thing

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

这样做有什么缺点?我认为优点很明显,缺点通常会在以后回来咬你。

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

最佳答案

我看到通过扩展方法构建接口(interface)功能的问题是您不再实际实现接口(interface),因此不能将对象用作接口(interface)类型。

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

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

关于c#-3.0 - 在 C# 中的接口(interface)上具有扩展方法的伪多重继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929820/

相关文章:

c#-3.0 - 关闭 FileStream 和将其设置为 null 有什么区别?

c# - Visual Studio 2015 扩展方法调用作为方法组

c# - 字节数组的扩展方法有问题

java - 如何消除for循环中的重复代码?

c - 你怎么能对没有反射的编程语言感到厌烦呢?

c# - 在 C# 3.0 中我们使用 "var"在 C# 2.0 中它的替代品是什么?

.net-3.5 - 在未安装 .Net Framework 的情况下运行 c# 3 应用程序?

c# - C#连接MySql数据库

c# - 如何在 C# 中对 & "crop"字典列表进行排序

html - CSS 与 DRY