C# 我可以用动态对象模拟多重继承吗?
我刚刚重构了我的服务层中几乎所有的类,以继承自C# 我可以用动态对象模拟多重继承吗?,c#,.net,dynamic,c#-4.0,.net-4.0,C#,.net,Dynamic,C# 4.0,.net 4.0,我刚刚重构了我的服务层中几乎所有的类,以继承自ServiceBase,以减少初始化数据访问时的重复,以及与几乎所有服务相同的其他方面,但当我到达角色服务时,我被阻止了,因为它必须继承自RoleProvider,所以我可以将它配置为我的网站的“官方”角色提供者 现在已经有点晚了,咖啡因还在表单上,但我想知道是否有任何方法可以使用动态对象代替派生对象,并在运行时而不是编译时将基础对象的所有成员添加到“派生”对象中 这是远程可能的吗?您应该能够在类中实现这一点。不知道您是否真的需要在类级别上解决问题,
ServiceBase
,以减少初始化数据访问时的重复,以及与几乎所有服务相同的其他方面,但当我到达角色服务时,我被阻止了,因为它必须继承自RoleProvider
,所以我可以将它配置为我的网站的“官方”角色提供者
现在已经有点晚了,咖啡因还在表单上,但我想知道是否有任何方法可以使用动态对象代替派生对象,并在运行时而不是编译时将基础对象的所有成员添加到“派生”对象中
这是远程可能的吗?您应该能够在类中实现这一点。不知道您是否真的需要在类级别上解决问题,但以下一些资源可能有助于将您的角色提供程序设置为WCF服务:
(多好的链接啊!)
编辑----
这篇文章也提到了这一点:
不,DynamicObject
不允许从两个具体类派生,这就是多重继承,而C#不支持。无论是动态的还是静态的,你所面临的问题都是一样的。如果您有相互不相关的Base1
和Base2
,那么只要您从Base1
派生出Derived
,那么派生的是Base2
就不可能是真的。相反,您可以满足于派生的是IBase2
我建议您使用:
以及多个接口或一个具体派生和一个接口。要模拟多重继承,请执行以下操作:
- 创建接口而不是基
- 实现接口,而不是从基础派生
- 创建一个实现器类,该类执行您希望在基础中执行的工作
- 通过将所有接口调用转发到实现者的实例,将“桥接”到实现者
这将实现类中的代码量限制为每个接口方法或属性只有一个转发调用。+1了解有趣的问题。我不知道:)这里没有直接回答您的问题,但我发现在分离关注点和正确使用依赖项注入时,从公共基类继承基本上是不必要的。我从来没有说过我想从两个类中继承,而是用两个“BASIC”类的成员动态构建一个对象。这非常清楚地表明,您希望模拟从两个类继承。尽管如此,我仍然相信DynamicObject
对于添加来自另一个伪基类的成员没有任何帮助。至少不比桥接模式好。我将在后面重新阐述这个问题,不再提及“继承”,而是简单地将多个对象的成员合并到一个对象中。