Jor*_*oba 7 c# lambda anonymous-methods
在查找这个问题的答案时:" 为什么在匿名方法中不允许使用out参数? "我对lambda表达式和匿名方法实际上如何工作有点遗憾.
在评论中,JaredPar声称"想象一下,例如out参数引用堆栈上的局部变量.lambda可以在将来的任意点执行,因此可以在堆栈帧不再有效时执行".
我指出,如果不是任何其他变量的情况......这基本上让我想知道我对lambda表达式的真正了解.
我想到的是这样的事情:
public void Foo(ComplexObject val, out SomeDelegate outDelegate)
{
ComplexObject obj = new ComplexObject(val)
SomeDelegate = delegate(int other) { return (obj.value * other); }
}
public void Bar()
{
SomeDelegate MyDel = null;
Foo(5, out MyDel);
int finalRes = MyDel(100);
// Whatever
}
Run Code Online (Sandbox Code Playgroud)
在那种情况下,我真的不知道发生了什么.obj是堆栈上的引用,它在方法返回时不再有效,因此匿名方法应该能够(如果可行)实际知道它是引用类型并复制引用而不是值,如果它...如果"用例"或多或少相同,为什么不参考params工作呢?
我做了一个关于闭包如何在内部工作的相当广泛的博客系列.它是为闭包的VB.Net实现编写的,但底层细节与C#非常相似.它应该提供您正在寻找的答案
以下是指向第6部分的链接,该链接指向所有其他文章
| 归档时间: |
|
| 查看次数: |
3543 次 |
| 最近记录: |