Fonctions anonymes statiques
Remarque
Cet article est une spécification de fonctionnalité. La spécification sert de document de conception pour la fonctionnalité. Il inclut les modifications de spécification proposées, ainsi que les informations nécessaires pendant la conception et le développement de la fonctionnalité. Ces articles sont publiés jusqu’à ce que les modifications de spécification proposées soient finalisées et incorporées dans la spécification ECMA actuelle.
Il peut y avoir des différences entre la spécification de la fonctionnalité et l’implémentation terminée. Ces différences sont consignées dans les notes pertinentes de la réunion de conception linguistique (LDM).
Vous pouvez en savoir plus sur le processus d’adoption des speclets de fonctionnalités dans la norme de langage C# dans l’article sur les spécifications .
Problème de champion : https://github.com/dotnet/csharplang/issues/275
Résumé
Autoriser un modificateur « statique » sur les lambdas ou méthodes anonymes, ce qui empêche la capture des variables locales ou de l’état d’instance depuis les portées englobantes.
Motivation
Évitez de capturer involontairement l’état à partir du contexte englobant, ce qui peut entraîner une conservation imprévue des objets capturés ou des allocations supplémentaires imprévues.
Conception détaillée
Une méthode lambda ou anonyme peut avoir un modificateur static
. Le modificateur static
indique que la méthode lambda ou anonyme est une fonction anonyme statique .
Une fonction anonyme statique ne peut pas capturer l’état à partir de l’étendue englobante.
Par conséquent, les variables locales, les paramètres et les this
de l’étendue englobante ne sont pas disponibles au sein d’une fonction anonyme statique.
Une fonction anonyme statique ne peut pas référencer les membres d’instance à partir d’un this
implicite ou explicite ou d’une référence base
.
Une fonction anonyme statique peut référencer static
membres de l’étendue englobante.
Une fonction anonyme statique peut référencer constant
définitions de l’étendue englobante.
nameof()
dans une fonction anonyme statique peut référencer des variables locales, des paramètres ou des this
ou base
à partir de l’étendue englobante.
Les règles d’accessibilité pour les membres private
dans l’étendue englobante sont les mêmes pour les fonctions anonymes static
et non static
.
Aucune garantie n’est apportée quant à savoir si une fonction anonyme statique définition est émise en tant que méthode static
dans les métadonnées. Cela est laissé à l’implémentation du compilateur pour optimiser.
Une fonction anonyme ou une fonction locale non static
peut capturer l’état à partir d’une fonction anonyme statique englobante, mais ne peut pas capturer l’état en dehors de la fonction anonyme statique englobante.
La suppression du modificateur static
d’une fonction anonyme dans un programme valide ne modifie pas la signification du programme.
C# feature specifications