共用方式為


靜態匿名函式

注意

本文是功能規格。 規格可作為功能的設計檔。 其中包含建議的規格變更,以及功能設計和開發期間所需的資訊。 這些文章會發佈,直到提議的規格變更完成並併併入目前的ECMA規格為止。

功能規格與已完成實作之間可能有一些差異。 這些差異是在相關 語言設計會議(LDM)記錄中擷取的。

規格一文中,您可以深入了解將功能規範引入 C# 語言標準的相關過程

冠軍問題:https://github.com/dotnet/csharplang/issues/275

總結

在 lambda 表達式和匿名方法中允許使用「靜態」修飾符,這樣可以避免從包含的範圍中捕捉局部變數或實例狀態。

動機

避免不經意地從封閉的上下文中捕捉狀態,這可能會導致擷取的物件被意外保留或產生不必要的額外分配。

詳細設計

Lambda 或匿名方法可能有 static 修飾詞。 static 修飾詞指出 Lambda 或匿名方法是 靜態匿名函式

靜態匿名函式 無法從封入範圍擷取狀態。 因此,封入範圍中的局部變數、參數和 this 無法在 靜態匿名函式中使用。

靜態匿名函式 無法引用來自隱含或明確 thisbase 的實例成員。

靜態匿名函式 可能會從封入範圍參考 static 成員。

靜態匿名函式 可能會參考封入範圍中的 constant 定義。

nameof() 靜態匿名函式 可能會參考封入範圍中的局部變數、參數,或者 thisbase

在封閉範圍中,private 成員的存取規則與 static 和非static 匿名函式相同。

不保證 靜態匿名函式 定義是否會作為中繼資料中的 static 方法。 這會留給編譯程序實作優化。

static 本機函式或匿名函式可以從封入 靜態匿名函式 擷取狀態,但無法擷取封入 靜態匿名函式以外的狀態

從有效程式中的匿名函式中移除 static 修飾詞並不會變更程序的意義。