Attributs sur des fonctions locales
Remarque
Cet article est une spécification de fonctionnalité. La spécification sert de document de conception pour la fonctionnalité. Elle inclut les changements de spécification proposés, ainsi que les informations nécessaires à la conception et au développement de la fonctionnalité. Ces articles sont publiés jusqu'à ce que les changements proposés soient finalisés et incorporés dans la spécification ECMA actuelle.
Il peut y avoir des différences entre la spécification de la fonctionnalité et l'implémentation réalisée. Ces différences sont consignées dans les notes pertinentes de la réunion de conception linguistique (LDM).
Pour en savoir plus sur le processus d'adoption des speclets de fonctionnalité dans la norme du langage C#, consultez l'article sur les spécifications.
Problème de champion : https://github.com/dotnet/csharplang/issues/1888
Attributs
Les déclarations de fonctions locales sont maintenant autorisées à avoir des attributs (§22). Les paramètres et les paramètres de type sur les fonctions locales sont également autorisés à avoir des attributs.
Les attributs ayant une signification spécifique lorsqu'ils sont appliqués à une méthode, à ses paramètres ou à ses paramètres de type auront la même signification lorsqu'ils sont appliqués à une fonction locale, à ses paramètres ou à ses paramètres de type, respectivement.
Une fonction locale peut être rendue conditionnelle dans le même sens qu'une méthode conditionnelle (§22.5.3) en la décorant d'un [ConditionalAttribute]
. Une fonction locale conditionnelle doit également être static
. Toutes les restrictions applicables aux méthodes conditionnelles s'appliquent également aux fonctions locales conditionnelles, y compris le fait que le type de retour doit être void
.
Extern
Le modificateur extern
est désormais autorisé pour les fonctions locales. Cela rend la fonction locale externe dans le même sens qu'une méthode externe (§15.6.8).
Comme pour une méthode externe, le local-function-body d'une fonction locale externe doit être un point-virgule. Un point-virgule dans le corps de fonction locale n’est autorisé que dans une fonction locale externe.
Une fonction locale externe doit également être static
.
Syntaxe
Le §13.6.4, ou grammaire des fonctions locales, est modifié comme suit :
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