理解 C# 閉包:存取超出直接作用域的變數
C# 閉包,也稱為內嵌委託或匿名方法,是強大的程式設計結構。 它們是巢狀函數,即使在封閉函數完成執行之後,也可以保持對周圍(封閉)函數的變數的存取。
讓我們用一個例子來說明這一點:
public Person FindById(int id) { return this.Find(delegate(Person p) { return (p.Id == id); }); }
匿名方法(delegate
)充當閉包。 至關重要的是,它從 id
函數存取 FindById
參數,即使它是稍後在 FindById
函數範圍之外執行的。
C# 6 引入了 lambda 表達式,提供了更簡潔的方式來實現相同的結果:
public Person FindById(int id) { return this.Find(p => p.Id == id); }
lambda 表達式 (p => p.Id == id
) 優雅地封裝了閉包的行為。
總之,C# 中的閉包提供了一種建立巢狀函數的機制,該函數保留對其父函數上下文的存取權。這使得程式碼更加簡潔、可重複使用和封裝,從而簡化了複雜的邏輯。
以上是C# 閉包如何允許存取其直接作用域之外的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!