首页 >后端开发 >C++ >C# 闭包如何从其父方法访问变量?

C# 闭包如何从其父方法访问变量?

DDD
DDD原创
2025-01-08 08:16:41756浏览

How Do C# Closures Access Variables from Their Parent Methods?

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

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