理解 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中文网其他相关文章!