跨不同程序集的函数参数

时间:2016-02-03 14:06:13

标签: c# lambda

假设我有一个在程序集A.dll中定义的函数DoStuff。此函数采用Func<T>参数。我将此函数称为B.dll中的DoStuff(() => ...)

Func<T>评估在哪里?它似乎在B.dll里面,但我希望它在A.dll里面。如果Func<T>需要外部参考,会发生什么?我被迫把它们包括在B.dll中吗?我可以强制它在A.dll中执行吗?

2 个答案:

答案 0 :(得分:4)

将lambda编译成B并在那里执行。

您可以在此处详细了解其工作原理:What are C# lambda's compiled into? A stackframe, an instance of an anonymous type, or?

答案 1 :(得分:3)

  

Func在哪里评估?

您正在将函数定义B传递给A已编译的代码存在于B中。 A可能执行该函数作为DoStuff的一部分。

  

如果Func<T>需要外部参考,会发生什么?

然后,这些依赖项需要由项目B引用,并且需要包含在最终构建中,这可能意味着从执行项目(来自您的注释的WCF服务)引用它们。