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
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
| ';'
;
C# feature specifications