Sdílet prostřednictvím


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.