我想创建一个委托(delegate)和一个可用于调用我的应用程序所需的任意数量的 Web 服务的方法:
例子:
public DateCheckResponseGetDate(DateCheckRequest requestParameters)
{
delegate object WebMethodToCall(object methodObject);
WebMethodToCall getTheDate = new WebMethodToCall(WebServices.GetTheDate);
return (DateCheckResponse)CallWebMethod(getTheDate , requestParameters);
}
public TimeCheckResponse GetTime(TimeCheckRequest requestParameters)
{
delegate object WebMethodToCall(object methodObject);
WebMethodToCall getTheTime = new WebMethodToCall(WebServices.GetTheTime);
return (TimeCheckResponse)CallWebMethod(getTheTime, requestParameters);
}
private object CallWebMethod(WebMethodToCall method, object methodObject)
{
return method(methodObject);
}
但是,不幸的是,当我尝试编译时,出现了这些错误:
No overload for 'GetTheDate' matches delegate 'WebMethodToCall' No overload for 'GetTheTime' matches delegate 'WebMethodToCall'
看来委托(delegate)应该工作。
WebServices.GetTheDate 和 WebServices.GetTheTime 都采用单个参数(分别为 DateCheckRequest 和 TimeCheckRequest)并且都返回一个值。
那么委托(delegate)不匹配两个网络方法的签名吗? (都接受和返回从对象派生的类型)。
是否可以使用对象类型在 .NET 2.0 中创建一个可重用性很强的委托(delegate)?
最佳答案
我建议您将代码更改为:
public DateCheckResponseGetDate(DateCheckRequest requestParameters)
{
Func<DateCheckRequest, DateCheckResponse> getTheDate = new Func<DateCheckRequest, DateCheckResponse>(WebServices.GetTheDate);
return CallWebMethod(getTheDate , requestParameters);
}
//DEFINE CallWebMethod ADEQUATELY!
public T CallWebMethod<T,U> (Func<T,U> webMethod, U arg)
{
return webMethod(arg);
}
这样你就可以避免所有丑陋的向下转换:)
关于c# - C# 委托(delegate)可以使用对象类型来更通用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734698/