我的C#应用程序中有两个ServiceReference(通过VisualStudio生成):ServiceReference1和ServiceReference2。
两者都有相同的方法和类名。它们的接口在某些方法上有所不同,但我只想使用两者都具有相同接口的方法。
如何动态使用它们?
示例:
ServiceReference1.Client clnt1 = new ServiceReference1.Client();
ServiceReference2.Client clnt2 = new ServiceReference2.Client();
string result = "";
if (type == 1)
result = clnt1.calculate();
else
result = clnt2.calculate();
string result2 = "";
if (type == 1)
result2 = clnt1.calculate2();
else
result2 = clnt2.calculate2();
//and so on...
我正在寻找类似的东西......
ServiceReference1.Client clnt = null;
if (type == 1)
clnt = new ServiceReference1.Client();
else
clnt = new (ServiceReference1.Client)ServiceReference2.Client();
string result = clnt.calculate();
string result2 = clnt.calculate2();
//and so on...
由于ServiceReference1.Client
拥有ServiceReference2.Client
(以及更多)的所有方法,我认为它应该是可能的。但它不起作用。
对var
变量使用clnt
也不起作用,因为客户端是在类中全局定义的,var
只能在方法中使用。
答案 0 :(得分:3)
我不知道你是如何生成这些的,但是大多数时候从Visual Studio获取生成的代码时,将类声明为partial classes是足够聪明的。
public partial class ServiceReference1
{
public string Calculate()
{
// Implementation
}
}
public partial class ServiceReference2
{
public string Calculate()
{
// Implementation
}
}
如果是这种情况,您可以做的是将自己单独的部分类文件添加到项目中以扩展它们。在新文件中,您可以使这些类实现一个通用接口。
public partial class ServiceReference1 : IServiceReference
{
// Nothing needed here
}
public partial class ServiceReference2 : IServiceReference
{
// Nothing needed here
}
public interface IServiceReference
{
string Calculate();
}
然后你可以像这样打电话给他们:
IServiceReference clnt = null;
if (type == 1)
clnt = new ServiceReference1.Client();
else
clnt = new ServiceReference2.Client();
string result = clnt.Calculate();
//and so on...