首页 >后端开发 >C++ >C# 闭包如何允许访问其直接作用域之外的变量?

C# 闭包如何允许访问其直接作用域之外的变量?

Susan Sarandon
Susan Sarandon原创
2025-01-08 08:01:41378浏览

How Do C# Closures Enable Access to Variables Outside Their Immediate Scope?

理解 C# 闭包:访问超出直接作用域的变量

C# 闭包,也称为内联委托或匿名方法,是强大的编程结构。 它们是嵌套函数,即使在封闭函数完成执行之后,也可以保持对周围(封闭)函数的变量的访问。

让我们用一个例子来说明这一点:

<code class="language-csharp">public Person FindById(int id)
{
    return this.Find(delegate(Person p)
    {
        return (p.Id == id);
    });
}</code>

匿名方法(delegate)充当闭包。 至关重要的是,它从 id 函数访问 FindById 参数,即使它是稍后在 FindById 函数范围之外执行的。

C# 6 引入了 lambda 表达式,提供了一种更简洁的方式来实现相同的结果:

<code class="language-csharp">public Person FindById(int id)
{
    return this.Find(p => p.Id == id);
}</code>

lambda 表达式 (p => p.Id == id) 优雅地封装了闭包的行为。

总之,C# 中的闭包提供了一种创建嵌套函数的机制,该函数保留对其父函数上下文的访问权限。这使得代码更加简洁、可重用和封装,从而简化了复杂的逻辑。

以上是C# 闭包如何允许访问其直接作用域之外的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn