Udostępnij za pośrednictwem


Atrybuty funkcji lokalnych

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ą przechwytywane w odpowiednich 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 .

Atrybuty

Lokalne deklaracje funkcji mogą teraz mieć atrybuty (§22). Parametry i parametry typu w funkcjach lokalnych mogą również mieć atrybuty.

Atrybuty o określonym znaczeniu w przypadku zastosowania do metody, jej parametrów lub parametrów typu będą miały takie samo znaczenie, gdy są stosowane do funkcji lokalnej, jej parametrów lub parametrów typu, odpowiednio.

Funkcja lokalna może stać się warunkowa w tym samym sensie co metoda warunkowa (§22.5.3) poprzez udekorowanie jej [ConditionalAttribute]. Warunkowa funkcja lokalna musi również być static. Wszystkie ograniczenia dotyczące metod warunkowych mają również zastosowanie do warunkowych funkcji lokalnych, w tym, że typ zwracany musi być void.

Extern

Modyfikator extern jest teraz dozwolony w funkcjach lokalnych. Sprawia to, że funkcja lokalna jest zewnętrzna w tym samym sensie co metoda zewnętrzna (§15.6.8).

Podobnie jak w przypadku zewnętrznej metody, ciało lokalnej funkcji zewnętrznej musi być średnikiem. Średnik local-function-body jest dozwolony tylko w zewnętrznej funkcji lokalnej.

Zewnętrzna funkcja lokalna musi być również static.

Składnia

§13.6.4lub gramatyki funkcji lokalnych jest modyfikowany w następujący sposób:

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
    | ';'
    ;