C#中的“闭包”是什么?

81

重复的问题:https://dev59.com/InRC5IYBdhLWcg3wCMrX - Adam Lassek
4
可能是重复的问题;然而被接受的答案特别简明扼要。 - Roja Buck
1
有没有关于闭包用法的实际示例可用? - Alex Gordon
2
在我读了“闭包是一个函数,它捕获其词法上下文中自由变量的绑定”这句话后,只理解了其中的“函数”一词,我很高兴发现Justin Etheredge的文章,作者用简单有趣的措辞解释了这个概念,值得获奖。 - mins
1个回答

115
在C#中,闭包采用内联委托/匿名方法的形式。闭包与其父方法相关联,这意味着在父方法体中定义的变量可以在匿名方法中引用。 示例:
public Person FindById(int id)
{
    return this.Find(delegate(Person p)
    {
        return (p.Id == id);
    });
}

你也可以看看Martin FowlerJon Skeet的博客。我相信你至少能从其中一个博客中获得更加“深入”的解析。
C# 6的示例:
public Person FindById(int id)
{
    return this.Find(p => p.Id == id);
}

相当于
public Person FindById(int id) => this.Find(p => p.Id == id);

5
有人有这个答案的C# 6或7更新版本吗? - Alex Gordon
@l--''''''---------'''''''''''' 这就是你要的! - Nick Bull
@NickBull非常感谢。现在已经过去两年了,我实际上正在寻找最新和最好的版本,大约是8.3? - Alex Gordon
没有什么不同,我想到了 - C#7/8在影响匿名方法/闭包语法方面没有提供太多。 - Nick Bull

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