繁体   English   中英

Func委托用作参数

[英]Func delegate used as a parameter

我试图了解下面的代码实际上是做什么的。

我们有Submit方法,该方法返回void并接受两个参数:

  • 代表d
  • 无限制的任何参数

然后我们使用参数调用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方法采用三个参数并返回值。

因此,我们有以下类型的参数:

  • BusinessMetadataQueryDataContract
  • 的AsyncCallback
  • 宾语

我们有返回类型:

  • IAsyncResult的

然后我们有: (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM