我可以使用动态对象以某种方式模仿多重继承吗?

Pro*_*ofK 8 .net c# dynamic .net-4.0 c#-4.0

我刚刚重构了我的Services层中的几乎所有类来继承a ServiceBase,以减少初始化数据访问和其他几乎与所有服务相同的方面的重复,但是当我到达我的时候,我被阻止了RoleService,因为它必须继承从RoleProvider这样我可以配置它作为我的网站的"官方"的角色提供.

现在它有点深夜了,咖啡因就在形式上,但我想知道是否有任何方法可以使用动态对象代替派生对象,并将基础对象的所有成员添加到'派生'对象,在运行时,而不是编译时.

这甚至可以远程实现吗?

Ric*_*key 3

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

我建议您使用:

与多个接口或一个具体派生和一个接口一起。要模拟多重继承,您可以:

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

这将实现类中的代码量限制为每个接口方法或属性仅一次转发调用。