首頁 >後端開發 >C++ >C# 閉包如何允許存取其直接作用域之外的變數?

C# 閉包如何允許存取其直接作用域之外的變數?

Susan Sarandon
Susan Sarandon原創
2025-01-08 08:01:41418瀏覽

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