c# - 我能以某种方式使用动态对象模拟多重继承吗?

标签 c# .net dynamic c#-4.0 .net-4.0

我刚刚重构了我的服务层中几乎所有的类,以从 ServiceBase 继承,以减少初始化数据访问和几乎所有服务相同的其他方面的重复,但我在我的当我到达我的 RoleService 时进行跟踪,因为它必须从 RoleProvider 继承,以便我可以将其配置为我的网站的“官方”角色提供者。

现在已经是深夜了,咖啡因正在形成,但我想知道有没有办法用动态对象代替派生对象,并将基对象的所有成员添加到“派生”对象,在运行时,而不是编译时。

这有可能吗?

最佳答案

不,DynamicObject 不允许您从两个具体类派生,这就是多重​​继承,而 C# 不支持。无论是动态的还是静态的,您面临的问题都是相同的。如果您有 Base1Base2 彼此无关,那么只要您从 Base1 派生 DerivedDerived is Base2 不可能是真的。相反,您可以满足于 Derived is IBase2

我建议您使用:

连同多个接口(interface)或一个具体推导和一个接口(interface)。要模拟多重继承,您:

  • 创建接口(interface)而不是基础
  • 实现接口(interface)而不是从基础派生
  • 创建一个实现类来完成您想在基础中完成的工作
  • 通过将所有接口(interface)调用转发给实现者的实例来“桥接”实现者

这将您的实现类中的代码量限制为每个接口(interface)方法或属性只有一个转发调用。

关于c# - 我能以某种方式使用动态对象模拟多重继承吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5723039/

相关文章:

c# - 如何从本地路径清除图像控件

c# - XML 序列化错误 - 类型 'ItemsElementName' 的选择标识符 'ItemsChoiceType[]' 的值无效或缺失

c# - 从动态类型获取属性

dynamic - Drupal 7 : Best Practice for a Dynamic Select List in Drupal 7

javascript - 如何动态地创建/输入一个项目作为无序列表中另一个项目的子列表项目?

c# - 按相似节点的数量在 MVC View 中显示 XML 节点值?

c# - C#中的导入顺序

c# - PInvoke 创建桌面

c# - 字节到二进制字符串 C# - 显示所有 8 位数字

c# - Visual Studio $(ProjectDir) 是空字符串