我的 WCF Web 服务库在不同端点上公开了 2 个服务:
public interface ICommons
{
string Common();
}
public interface IFooA : ICommons
{
string SayFooA();
}
public interface IFooB : ICommons
{
string SayFooB();
}
及其各自的实现:
public class Commons : ICommons
{
public string Common() => "Common";
}
public class A : Commons, IFooA
{
public string SayFooA() => "FooA";
}
public class B : Commons, IFooB
{
public string SayFooB() => "FooB";
}
我想要第 4 个接口(interface),一个测试接口(interface),它将公开所有方法以便在没有任何引用杂耍的情况下测试它们。
我可以这样定义它:
public interface I_A_B : IFooA, IFooB
{
}
但问题在于这个契约(Contract)的执行。我想使用基类继承,以便起诉我使用相同的实现而无需复制过去和维护。
就像class A
使用class Commons
一样,Commons
实现的任何变化都会在A
中继承。
public class A : Commons, IFooA
但是多重继承是不可能的(引用 msdn Why doesn’t C# support multiple inheritance? ) , 所以下一行会导致错误。
public class A_B : A, B, I_A_B
我怎样才能实现 interface I_A_B : IFooA, IFooB
,它使用大部分 class A : Commons, IFooA
和 class B : Commons, IFooB
用最少的代码复制过去?
最佳答案
公开此类 WCF 接口(interface)的一种方法(如上面评论中所建议的)是:
public class A_B : I_A_B {
[Import]
public IFooA A {get; set;}
[Import]
public IFooB B {get; set;}
public string SayFooA() => A.SayFooA();
public string SayFooB() => B.SayFooB();
...
通过 A 实现 IFooA 方法,通过 B 实现 IFooB 方法。当然,正如您的链接所建议的那样,您必须手动决定哪个实现将调用“Common”方法。
关于c# - 多重继承,如何避免手动复制粘贴继承和维护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59632263/