Statyczne funkcje anonimowe
Notatka
Ten artykuł jest specyfikacją funkcji. Specyfikacja służy jako dokument projektowy dla funkcji. Zawiera proponowane zmiany specyfikacji wraz z informacjami wymaganymi podczas projektowania i opracowywania funkcji. Te artykuły są publikowane do momentu sfinalizowania proponowanych zmian specyfikacji i włączenia ich do obecnej specyfikacji ECMA.
Mogą wystąpić pewne rozbieżności między specyfikacją funkcji a ukończoną implementacją. Te różnice są uwzględnione w odpowiednich notatkach ze spotkania projektowego języka (LDM) .
Więcej informacji na temat procesu wdrażania specyfikacji funkcji można znaleźć w standardzie języka C# w artykule dotyczącym specyfikacji .
Kwestia mistrza: https://github.com/dotnet/csharplang/issues/275
Streszczenie
Zezwalaj na modyfikator "statyczny" w wyrażeniach lambda i metodach anonimowych, które nie pozwalają na przechwytywanie zmiennych lokalnych lub stanu wystąpienia z zewnętrznych zakresów.
Motywacja
Unikaj niezamierzonego przechwytywania stanu z otaczającego kontekstu, co może spowodować nieoczekiwane przechowywanie przechwyconych obiektów lub nieoczekiwane dodatkowe alokacje.
Szczegółowy projekt
Metoda lambda lub anonimowa może mieć modyfikator static
. Modyfikator static
wskazuje, że metoda lambda lub anonimowa jest statyczną funkcją anonimową.
Funkcja statyczna anonimowa nie może przechwycić stanu z otaczającego zakresu.
W związku z tym zmienne lokalne, parametry i this
z zakresu otaczającego nie są dostępne w statycznej funkcji anonimowej .
Statyczna funkcja anonimowa nie może odwoływać się do składowych instancji z niejawnego ani jawnego this
lub base
odwołania.
Anonimowa funkcja statyczna może odwoływać się do członków static
z otaczającego zakresu.
Statyczna funkcja anonimowa może odwoływać się do definicji constant
z otaczającego zakresu.
nameof()
w statycznej anonimowej funkcji może odwoływać się do zmiennych lokalnych, parametrów lub this
lub base
z otaczającego zakresu.
Reguły ułatwień dostępu dla elementów członkowskich private
w zakresie otaczającym są takie same w przypadku funkcji static
i innych niżstatic
anonimowych.
Nie ma gwarancji, czy statycznej funkcji anonimowej definicji jest emitowana jako metoda static
w metadanych. Jest to pozostawione do implementacji kompilatora w celu optymalizacji.
Funkcja lokalna lub funkcja anonimowa niestatic
może przechwytywać stan z otaczającej statycznej funkcji anonimowej, ale nie może przechwycić stanu poza otaczającą statyczną funkcją anonimową.
Usunięcie modyfikatora static
z funkcji anonimowej w prawidłowym programie nie zmienia znaczenia programu.
C# feature specifications