Condividi tramite


Attributi nelle funzioni locali

Nota

Questo articolo è una specifica di funzionalità. La specifica funge da documento di progettazione per la funzionalità. Include le modifiche specifiche proposte, insieme alle informazioni necessarie durante la progettazione e lo sviluppo della funzionalità. Questi articoli vengono pubblicati fino a quando le modifiche specifiche proposte non vengono completate e incorporate nella specifica ECMA corrente.

Potrebbero verificarsi alcune discrepanze tra la specifica di funzionalità e l'implementazione completata. Tali differenze vengono acquisite nelle note language design meeting (LDM) pertinenti.

Puoi trovare ulteriori informazioni sul processo di adozione delle speclette di funzionalità nello standard del linguaggio C# nell'articolo sulle specifiche .

Problema del campione: https://github.com/dotnet/csharplang/issues/1888

Attributi

Le dichiarazioni di funzione locali sono ora autorizzate ad avere attributi (§22). Anche i parametri e i parametri di tipo nelle funzioni locali possono avere attributi.

Gli attributi con un significato specificato quando vengono applicati a un metodo, ai relativi parametri o ai relativi parametri di tipo avranno lo stesso significato se applicati rispettivamente a una funzione locale, ai relativi parametri o ai relativi parametri di tipo.

Una funzione locale può essere resa condizionale nello stesso senso di un metodo condizionale (§22.5.3) decorandola con un [ConditionalAttribute]. Una funzione locale condizionale deve anche essere static. Tutte le restrizioni sui metodi condizionali si applicano anche alle funzioni locali condizionali, incluso che il tipo restituito deve essere void.

Extern

Il modificatore extern è ora consentito nelle funzioni locali. Ciò rende la funzione locale esterna nello stesso senso di un metodo esterno (§15.6.8).

Analogamente a un metodo esterno, il corpo della funzione locale di una funzione locale esterna deve essere un punto e virgola. Un punto e virgola del corpo della funzione locale è consentito solo in una funzione locale esterna.

Una funzione locale esterna deve anche essere static.

Sintassi

Il §13.6.4e la grammatica delle funzioni locali vengono modificati come segue:

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