我有一个托管的服务有两个接口A和B.我尝试使用ClientBase为我的客户端实现代理类。但是,我不知道如何宣布它。
这是我认为的应该是:
public class ServiceProxy : ClientBase<IA>, ClientBase<IB>, IA, IB
{
.......
}
这是宣布它的正确方法吗?如果没有,那么正确的方法是什么?谢谢。
答案 0 :(得分:3)
无法从C#中的两个基类继承。
您可以做的是使用合成来创建一个实现接口的类,并将实现委托给两个实例成员:ClientBase<IA>
和ClientBase<IB>
但是一旦你这样做,你必须问问自己为什么要那样做。为什么不能单独使用两个代理。我能提出的唯一原因是你应用Façade pattern
答案 1 :(得分:1)
这是通过将每个实例保持为私有属性并实现接口方法/属性来访问私有实例来克服多重继承问题的一种方法。 (在这种情况下,无法确定这对您有用,具体取决于实例化服务代理的工厂类型。)在这种情况下,我猜测IA和IB可能有一些具有相同签名的方法,在这种情况下,您需要使用显式接口实现来避免冲突。
public class ServiceProxy : IA, IB
{
private ClientBase<IA> IAProxy {get;set;}
private ClientBase<IB> IBProxy {get;set;}
public void IA.SomeInterfaceMethod(){
IAProxy.SomeInterfaceMethod();
}
public void IB.SomeInterfaceMethod(){
IBProxy.SomeInterfaceMethod();
}
}