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


Helyi függvények attribútumai

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/1888

Attribútumok

A helyi függvény deklarációi mostantól rendelkeznek attribútumokkal (§22). A helyi függvények paraméterei és típusparaméterei attribútumokkal is rendelkezhetnek.

A metódusokra, a paraméterekre vagy a típusparaméterekre alkalmazott, meghatározott jelentésű attribútumok ugyanazt a jelentést kapják, amikor egy helyi függvényre, annak paramétereire vagy típusparaméterére vonatkoznak.

A helyi függvényt ugyanolyan értelemben feltételessé lehet tenni, mint egy feltételes módszert (§22.5.3), egy [ConditionalAttribute]dekorálásával. A feltételes helyi függvénynek is statickell lennie. A feltételes metódusokra vonatkozó összes korlátozás a feltételes helyi függvényekre is vonatkozik, beleértve azt is, hogy a visszatérési típusnak voidkell lennie.

Külső

A extern módosító mostantól engedélyezve van a helyi függvényeken. Ez a helyi függvényt a külső metóduséval azonos értelemben teszi külsővé (§15.6.8).

A külső módszerhez hasonlóan a külső helyi függvény helyi függvénytörzsének pontosvesszővel kell végződnie. A helyi függvénytörzs pontosvesszővel csak külső helyi függvényeken engedélyezett.

A külső helyi függvénynek is statickell lennie.

Szintaxis

A §13.6.4, vagy a helyi függvények nyelvtana a következőképpen módosul:

local-function-header
    : attributes? local-function-modifiers? return-type identifier type-parameter-list?
        ( formal-parameter-list? ) type-parameter-constraints-clauses
    ;

local-function-modifiers
    : (async | unsafe | static | extern)*
    ;

local-function-body
    : block
    | arrow-expression-body
    | ';'
    ;