Statické anonymní funkce
Poznámka
Tento článek je specifikace funkce. Specifikace slouží jako návrhový dokument pro funkci. Zahrnuje navrhované změny specifikace spolu s informacemi potřebnými při návrhu a vývoji funkce. Tyto články se publikují, dokud nebudou navrhované změny specifikace finalizovány a začleněny do aktuální specifikace ECMA.
Mezi specifikací funkce a dokončenou implementací může docházet k nějakým nesrovnalostem. Tyto rozdíly jsou zachyceny v poznámkách ze schůzky návrhu jazyka (LDM).
Další informace o procesu přijetí specifikací funkcí do jazyka C# najdete v článku o specifikacích .
Problém šampiona: https://github.com/dotnet/csharplang/issues/275
Shrnutí
U lambda a anonymních metod povolte modifikátor static, který zakáže zachycení místních hodnot nebo stavu instance z rozsahů.
Motivace
Vyhněte se neúmyslnému zachytávání stavu z uzavřeného kontextu, což může vést k neočekávanému uchovávání zachycených objektů nebo neočekávaným dalším přidělením.
Podrobný návrh
Lambda nebo anonymní metoda může mít modifikátor static
. Modifikátor static
označuje, že lambda nebo anonymní metoda je statickou anonymní funkcí.
statické anonymní funkce nemohou zachytit stav z uzavírajícího rozsahu.
V důsledku toho nejsou místní hodnoty, parametry a this
z nadřazeného oboru dostupné v rámci statické anonymní funkce.
statickou anonymní funkci nemůže odkazovat na členy instance z implicitního nebo explicitního this
nebo base
odkazu.
statická anonymní funkce může odkazovat na členy static
z nadřazeného oboru.
statická anonymní funkce může odkazovat na definice constant
z vnějšího oboru.
nameof()
v statické anonymní funkci mohou odkazovat na místní hodnoty, parametry nebo this
nebo base
z nadřazeného oboru.
Pravidla přístupnosti pro členy private
v nadřazeném oboru jsou stejná pro static
a nestatic
anonymní funkce.
Není zaručeno, zda statickou anonymní funkci definice je generována jako metoda static
v metadatech. To je ponecháno na implementaci kompilátoru pro optimalizaci.
Jiná nežstatic
místní funkce nebo anonymní funkce může zachytit stav z uzavřené statické anonymní funkce, ale nemůže zachytit stav mimo uzavřenou statickou anonymní funkci.
Odebrání modifikátoru static
z anonymní funkce v platném programu nezmění význam programu.
C# feature specifications