我目前正在研究lambda表达式,而关闭这个词一直在继续。有人可以用简单的语言向我解释。
答案 0 :(得分:20)
我说这是重复的:What are ‘closures’ in .NET?
“本质上,闭包是一个代码块,可以在以后执行,但它维护了它最初创建的环境 - 即它仍然可以使用创建它的方法的局部变量等,即使该方法已经完成执行。“
答案 1 :(得分:12)
你的鞋子在大厅里;您的 夹克在厨房里。放他们 在和你的手套(他们在 出门时,出门。
现在你可以去玩你的车了。 十一点钟你必须买一些 在角落商店的面包。
小孩戏。忘记了整个世界。
闹钟响起;小孩看到了:十一点!哦 - 到户外用“外出”关闭来买面包。
答案 2 :(得分:10)
我喜欢Javascript的Google example(您可以轻松地将其变形为C#)。这不是一个5岁的孩子会理解的东西但是我怀疑平均 5岁的孩子会理解功能是什么。
/*
* When a function is defined in another function and it
* has access to the outer function's context even after
* the outer function returns
* An important concept to learn in Javascript
*/
function outerFunction(someNum) {
var someString = 'Hai!';
var content = document.getElementById('content');
function innerFunction() {
content.innerHTML = someNum + ': ' + someString;
content = null; // IE memory leak for DOM reference
}
innerFunction();
}
答案 3 :(得分:8)
下面的回答是原来的措辞,类似于“如何解释对一个5岁的人的关闭”。
拿这个盒子;建立自己 一个漂亮的小太空船。当你去 到比利的房子,带上你的空间 在那里工艺;有闭合你可以 仍然可以使用你的所有作品 即使盒子被遗弃,也是一大堆 在你的卧室里。
答案 4 :(得分:5)
如果你真的需要保持简单,那么一个闭包是一个带有上下文的函数。无论你在何处调用它,闭包中的函数仍然可以访问它定义时的相同变量。 (在Lua中,这些被称为 upvalues ,我认为这是一个非常具有描述性的术语。)
我在Lua中首先遇到了这个概念,这个定义帮助我理解了这个概念。也许看看Lua:它的简单性和强大功能非常吸引人,当然有助于在其他语言中发展某种观点。它的封闭概念就是一个很好的例子。
答案 5 :(得分:4)
如果5岁的人知道C#,我会用这段代码说明:
int i = 0;
string result = null;
Action iExaminer = () =>
{
result = i % 2 == 1 ? "Odd" : "Even";
};
i = 1;
iExaminer();
Console.WriteLine(result);
如果5岁的孩子正在学习linq,我会用这段代码说明:
string name = null;
IEnumerable<Customer> query = Customers.Where(c => c.Name == name);
name = "Bob";
// query is resolved when enumerated (which is now)
// Where will now call our anonymous method.
foreach(var customer in query)
{
Console.WriteLine(customer.Name);
}
答案 6 :(得分:2)
在计算机科学中,闭包是一个具有自由变量的第一类函数,它们在词法环境中受到约束。
<强>翻译强>
闭包关闭/附加函数周围的变量,以便该函数可以传送到其他地方并仍然使用这些变量
例如假设你被传送到一个偏远的地方,但仍然可以看到躺在你桌子上的棺材杯子
示例:强>
function makefunc(x)
{
return function(){return x}
}
现在使用makefunc,您可以创建许多匿名函数,这些函数将返回传递给makefunc的内容
所以如果你想要一个返回10的函数,请使用makefunc(10)(),尽管回到10只是无用的方法:)
答案 7 :(得分:0)
当您知道如何做一般事情时,您可以指定一些(或所有)细节并获得闭包。
例如,您知道如何购买冰淇淋。如果你在任何商店前面,你知道该怎么办。但是如果你想去某个特定的商店(例如,由于星期天的折扣),你就会搬出房子,目的是买那里的冰淇淋。 “在拐角处的商店购买一些冰淇淋”是关闭“购买一些冰淇淋”。事实上,所有这些都是“在某个地方买一些冰淇淋”的关闭:
现在和你的朋友一起玩,儿子! (我要记住,不要在孩子面前说出类似的话)
答案 8 :(得分:0)
这是在C#中使用这个想法的简单方法:Closure