[英]Func delegate used as a parameter
我试图了解下面的代码实际上是做什么的。
我们有Submit
方法,该方法返回void
并接受两个参数:
然后我们使用参数调用Submit
方法。
这部分代码我听不懂。
void Submit(Delegate d, params object[] arguments)
{
ServiceQueue.Get.Submit(d, arguments);
}
Submit(new Func<BusinessMetadataQueryDataContract,
AsyncCallback,
object,
IAsyncResult>(
this.Channel.BeginBusinessMetadataGet),
contract,
new AsyncCallback(
(iar) =>
{
BusinessMetadataDataContract outContract = null;
Action<Exception, OpusReturnType> response =
(e, ort) =>
{
SilverlightClient.UIThread.Run(() =>
{
this.BusinessMetadataGetActionCompleted(this,
new ActionCompletedEventArgs<BusinessMetadataDataContract>(
ort,
outContract,
e,
false,
asyncState));
});
};
try
{
response(null,
this.Channel.EndBusinessMetadataGet(
out outContract,
iar));
}
catch (Exception e)
{
response(e,
new OpusReturnType());
}
}),
asyncState);
Func
方法采用三个参数并返回值。
因此,我们有以下类型的参数:
我们有返回类型:
然后我们有: (this.Channel.BeginBusinessMetadataGet),
我不明白。 这是在做什么 我期待一个开括号(
和类型为BusinessMetadataQueryDataContract
的第一个参数,相反,我得到(this.Channel.BeginBusinessMetadataGet)
并且预期的参数位于第二个位置。
我一定在这里想念什么。
有什么帮助吗? 谢谢!
this.Channel.BeginBusinessMetadataGet是实际的委托,具有您描述的签名。 因此,第一个参数(Delegate d)是这样的:
new Func<BusinessMetadataQueryDataContract,
AsyncCallback,
object,
IAsyncResult>(
this.Channel.BeginBusinessMetadataGet)
这从BeginBusinessMetadataGet方法创建一个委托。 在这之后是委托将使用的所有参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.