Chr*_*nce 14 c# anonymous-methods out-parameters ref-parameters
这不是使用匿名方法的ref或out参数调用方法的欺骗
我想知道为什么在匿名方法中不允许输出参数.不允许ref参数对我来说更有意义,但是out参数不是那么多.
你对此有何看法?
Jar*_*Par 29
在某些方面,这是一个骗局. Out参数是ref参数.C#语言使用的值只有一个额外的属性.不允许它们的原因与ref参数完全相同.
这里的问题源于在匿名方法中使用匿名方法之外声明的值的效果.这样做会捕获lambda中的值,并且必然会将其生命周期延长到超出当前函数的寿命.这与out具有固定寿命的参数不兼容.
例如,假设out参数引用堆栈上的局部变量.lambda可以在将来的任意点执行,因此可以在该堆栈帧不再有效时执行.会是什么out参数的意思呢?
这基本上与匿名委托/ lambda表达式的参数是捕获变量这一事实有关,并且捕获ref/ out变量在C#/ CLR中没有任何意义,因为它在内部需要ref/ out fields.另外,请注意我将这两个关键字配对,因为它们实际上是相同的.
如果你想要一个完整的解释,Eric Lippert在他的博客上详细讨论了这个设计点.(特别参见底部附近的段落.)
| 归档时间: |
|
| 查看次数: |
7307 次 |
| 最近记录: |