探索 C# 闭包:从封闭方法访问变量
在编程中,“闭包”是指即使在周围函数完成执行之后,也保留对其周围范围内的变量的访问的函数。 在 C# 中,这通常使用匿名方法或 lambda 表达式来实现。 关键特征是闭包能够“记住”其父方法中的变量。
说明性 C# 示例:
考虑这个代码片段:
<code class="language-csharp">public Person FindById(int id) { return this.Find(delegate(Person p) { return (p.Id == id); }); }</code>
这里,FindById
中的匿名委托访问 id
方法中声明的 FindById
变量。这演示了闭包捕获和维护对其封闭范围内的变量的访问的能力。
进一步学习:
要更深入地了解闭包,请参阅 Martin Fowler 和 Jon Skeet 有关该主题的著作等资源。 他们提供了详细的解释和示例。
利用 C# 6 语法:
C# 6 使用 lambda 表达式引入了更简洁的闭包语法:
<code class="language-csharp">public Person FindById(int id) { return this.Find(p => p.Id == id); }</code>
此 lambda 表达式实现了与上一示例中的匿名委托相同的功能,但提高了可读性。
等效简洁语法:
上面的例子可以使用箭头表达式进一步简化:
<code class="language-csharp">public Person FindById(int id) => this.Find(p => p.Id == id);</code>
这演示了在 C# 中定义闭包的更紧凑的方法。
以上是C# 闭包如何从其父方法访问变量?的详细内容。更多信息请关注PHP中文网其他相关文章!