什么是.NET中的“闭包(closures)”?

221

什么是闭包?.NET 中是否有闭包?

如果在.NET中存在闭包,你能提供一个代码片段(最好用C#)来解释它吗?

12个回答

0
闭包旨在简化函数式思维,它允许运行时管理状态,为开发人员释放额外的复杂性。闭包是一个一等函数,具有在词法环境中绑定的自由变量。在这些流行语背后隐藏着一个简单的概念:闭包是一种更方便的方式,可以使函数访问本地状态并将数据传递到后台操作。它们是特殊的函数,带有对所有非局部变量(也称为自由变量或上值)的隐式绑定。此外,闭包允许函数在其直接词法范围之外调用时访问一个或多个非局部变量,并且这个特殊函数的主体可以将这些自由变量作为单个实体传输,定义在其封闭范围内。更重要的是,闭包封装行为并像任何其他对象一样传递它,授予访问创建闭包的上下文、读取和更新这些值的权限。

enter image description here


-1
闭包是在函数内部定义的函数,它可以访问其本身以及其父级作用域中的局部变量。
public string GetByName(string name)
{
    List<things> theThings = new List<things>();
    return  theThings.Find<things>(t => t.Name == name)[0];
}

所以在find方法内部的函数。

t => t.Name == name

可以访问其作用域内的变量t,以及其父级作用域中的变量名。即使它作为委托由find方法执行,来自完全不同的作用域。


2
闭包并不是一个函数本身,它更多地通过讨论作用域来定义。函数只是帮助保持作用域的存在,从而创建了闭包。但是说闭包是一个函数在技术上并不正确。抱歉我有点吹毛求疵。 :) - Jason Bunting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接