我们正在创建一个Web服务来接收值(字符串)。根据字符串,我们确定它是“类型1”还是“类型2”,以及在处理方面需要做什么。 所以我的Web服务设置为使用以下方式接收数据: http://www.mysite.com/service.asmx?op=ProcessData?DataID=string
发送字符串的客户端希望使用2个不同的请求发送它: http://www.mysite.com/service.asmx?op=ProcessData?DataIDType1=string http://www.mysite.com/service.asmx?op=ProcessData?DataIDType2=string
我可以知道他发送的是哪种类型吗?我不能为此设置不同的签名吗?因为它们都是相同的参数?
答案 0 :(得分:0)
这类似于写作:
public void DoSomething(String inputA)
{
...
}
public void DoSomething(String inputB)
{
...
}
它不起作用(并且有充分的理由!) - 方法签名是相同的。
想象一下这个电话:
MyClass.DoSomething("TEST");
它会叫哪个? 应该调用哪个?
您的选择(如我所见):
public void DoThingA(String input)
{
...
}
public void DoThingB(String input)
{
...
}
这将为您提供不同的方法签名,并表示您正在进行两个不同的操作(后来更干净,IMO)。
如果您坚持使用单一方法签名,则可以执行以下操作:
public void DoSomething(String input, object operationType) //where object is whatever type you see fit...
{
if(operationType == ...)
{
DoThingA(input);
}
else
{
DoThingB(input);
}
}
或者...
public void DoSomething(String input)
{
switch(input)
{
case "A":
...
break;
case "B":
...
break;
default:
...
break;
}
}
最合适取决于您的可用选项。但我会创建两种方法。
答案 1 :(得分:0)
方法应该只有一个责任,因此我建议使用两种方法。
public void FirstMethod(string param)
{
// Do something.
}
public void SecondMethod(string param)
{
// Do something.
}
这代表了良好的设计,并且当客户想要添加更多功能时,后来的可维护性令人头疼,对您来说无疑更容易!