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

时间:2011-04-19 21:39:52

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

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

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

这甚至是远程可能吗?

3 个答案:

答案 0 :(得分:3)

不,DynamicObject不允许您从两个具体类派生,这是多重继承,以及C#不支持的。您遇到的问题无论是相同的方式,动态还是静态。如果您的Base1Base2彼此无关,那么只要您从Derived派生Base1,就无法Derived is Base2永远都是真的。相反,你可以选择Derived is IBase2

我建议你使用:

与多个接口或一个具体派生和一个接口一起使用。要模拟多重继承:

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

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

答案 1 :(得分:1)

您应该可以使用DynamicObject课程。

答案 2 :(得分:1)

Dunno如果你真的需要在类级别遇到麻烦,但是这里有一些资源可能有助于将你的角色提供程序设置为WCF服务:

http://wcfsecurity.codeplex.com/wikipage?title=How%20To%20-%20Use%20SQL%20Role%20Provider%20with%20Windows%20Authentication%20in%20WCF%20calling%20from%20Windows%20Forms(什么链接!)

http://msdn.microsoft.com/en-us/library/aa702542.aspx

编辑---- 这篇文章也提到了这里: Can I create a custom roleprovider through a WCF service?