Megosztás a következőn keresztül:


Statikus névtelen függvények

Jegyzet

Ez a cikk egy funkcióspecifikáció. A specifikáció a funkció tervezési dokumentumaként szolgál. Tartalmazza a specifikáció javasolt módosításait, valamint a funkció tervezése és fejlesztése során szükséges információkat. Ezeket a cikkeket mindaddig közzéteszik, amíg a javasolt specifikációmódosításokat nem véglegesítik, és be nem építik a jelenlegi ECMA-specifikációba.

A szolgáltatás specifikációja és a befejezett implementáció között eltérések lehetnek. Ezeket a különbségeket a vonatkozó nyelvi tervezési értekezlet (LDM) megjegyzései rögzítik.

A funkcióspektusok C# nyelvi szabványba való bevezetésének folyamatáról a specifikációkcímű cikkben olvashat bővebben.

Bajnoki probléma: https://github.com/dotnet/csharplang/issues/275

Összefoglalás

Engedélyezze a lambda kifejezések és névtelen metódusok „statikus” módosítóját, amely megakadályozza a helyi változók vagy példányállapotok rögzítését a tartalmazó hatókörökben.

Motiváció

Kerülje az állapot akaratlan rögzítését a belefoglaló környezetből, ami a rögzített objektumok váratlan megőrzését vagy váratlan további foglalásokat eredményezhet.

Részletes kialakítás

A lambda vagy névtelen metódusok static módosítóval rendelkezhetnek. A static módosító azt jelzi, hogy a lambda vagy névtelen metódus statikus névtelen függvény.

A statikus névtelen függvények nem tudják rögzíteni az állapotot a belefoglaló hatókörből. Ennek eredményeképpen a beágyazási hatókörben lévő helyi változók, paraméterek és this nem érhetők el a statikus névtelen függvény-ben.

A statikus névtelen függvény nem hivatkozhat példánytagokra implicit vagy explicit this vagy base hivatkozással.

A statikus névtelen függvény hivatkozhat static tagokra a belefoglalt hatókörből.

A statikus névtelen függvény hivatkozhat constant definíciókra a környező hatókörből.

nameof() egy statikus névtelen függvényben hivatkozhat a hatókör helyi adataira, paramétereire, this vagy base.

A private tagok hatókörbeli hozzáférési szabályai megegyeznek a static és a nemstatic névtelen függvények esetében.

Nincs garancia arra, hogy statikus névtelen függvény definíciója static metódusként van-e kibocsátva a metaadatokban. Az optimalizálás a fordító implementációján múlik.

Egy nemstatic helyi vagy névtelen függvény rögzítheti az állapotot egy befoglaló statikus névtelen függvényből, de nem képes az állapotot rögzíteni a befoglaló statikus névtelen függvényen kívül.

A static módosító eltávolítása egy névtelen függvényből egy érvényes programban nem változtatja meg a program jelentését.