gpt4 book ai didi

c# - 为什么有些 C# 方法使用对象来传递参数而不是直接传递它们?

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:29 27 4
gpt4 key购买 nike

我见过一些 C# 方法,例如 ThreadPool.QueueUserWorkItem(WaitCallback, Object) ,它采用一个方法(在本例中为“WaitCallback”),但不提供直接将参数传递给方法的选项,而是采用单独的 Object可以供应他们。
所以你不能做类似被问到的事情 here .

我的问题是:为什么?
使用这种方法必须有技术原因,并且不允许类似

ThreadPool.QueueUserWorkItem(new WaitCallback(Multiply(2, 3)));

private int Multiply(int x,int y)
{
int z=(x*y);
return z;
}

最佳答案

因为您想将委托(delegate)传递给 WaitCallBack .简单来说,你想告诉WaitCallBack线程必须执行的方法,但您现在不想调用该方法。

在你的例子中

ThreadPool.QueueUserWorkItem(new WaitCallback(Multiply(2, 3)));

方法 Multiply将被直接调用,其结果应传递给 WaitCallback构造函数(这是不可能的)。

编译器无法决定您是否想要 调用 Multiply在这里或只是想告诉 WaitCallback那就是必须做那个调用,因为它的语法完全一样。

这就是为什么你告诉它它应该调用哪个方法方法,以及 - 分开 - 当它最终调用它时它应该传递哪个参数。

但是您可以改用 lambda:
ThreadPool.QueueUserWorkItem(o => Multiply(2, 3));

现在线程可以执行这个 lambda,然后调用 Multiply(2, 3) (丢弃参数 o )。

关于c# - 为什么有些 C# 方法使用对象来传递参数而不是直接传递它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50000510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com