Statiska anonyma funktioner
Obs
Den här artikeln är en funktionsspecifikation. Specifikationen fungerar som designdokument för funktionen. Den innehåller föreslagna specifikationsändringar, tillsammans med information som behövs under utformningen och utvecklingen av funktionen. Dessa artiklar publiceras tills de föreslagna specifikationsändringarna har slutförts och införlivats i den aktuella ECMA-specifikationen.
Det kan finnas vissa skillnader mellan funktionsspecifikationen och den slutförda implementeringen. Dessa skillnader återspeglas i de relevanta anteckningarna från LDM (Language Design Meeting).
Du kan läsa mer om processen för att införa funktionsspecifikationer i C#-språkstandarden i artikeln om specifikationerna.
Champion-fråga: https://github.com/dotnet/csharplang/issues/275
Sammanfattning
Tillåt en "statisk" modifierare på lambdas och anonyma metoder, vilket förhindrar att lokala variabler eller instansvariabler från de omgivande omfången fångas.
Motivation
Undvik att oavsiktligt fånga tillståndsdata från den omgivande kontexten, vilket kan resultera i att objekten hålls kvar oväntat eller att ytterligare allokeringar sker.
Detaljerad design
En lambda- eller anonym metod kan ha en static
modifierare.
static
-modifieraren anger att lambda- eller anonym-metoden är en statisk anonym funktion.
En statisk anonym funktion kan inte fånga tillstånd från det omgivande omfånget.
Det innebär att lokaler, parametrar och this
från det omslutande omfånget inte är tillgängliga i en statisk anonym funktion.
En statisk anonym funktion kan inte referera till instansmedlemmar från en implicit eller explicit this
eller base
referens.
En statisk anonym funktion kan referera till static
medlemmar i det omgivande omfånget.
Ett statiskt anonymt funktionsuttryck kan referera till constant
definitioner från det omgivande omfånget.
nameof()
i en statisk anonym funktion kan referera till lokala variabler, parametrar eller this
eller base
från det omslutande omfånget.
Åtkomsträttigheterna för medlemmar i private
i det omslutande scope är de samma för static
och icke-static
anonyma funktioner.
Det finns ingen garanti för om en statisk anonym funktion definition genereras som en static
metod i metadata. Detta är upp till kompilatorimplementeringen att optimera.
En icke-static
lokal funktion eller anonym funktion kan avbilda tillstånd från en omslutande statisk anonym funktion men kan inte avbilda tillstånd utanför den omslutande statiska anonyma funktionen.
Om du tar bort static
-modifieraren från en anonym funktion i ett giltigt program ändras inte programmets innebörd.
C# feature specifications