Funciones anónimas estáticas
Nota
Este artículo es una especificación de características. La especificación actúa como documento de diseño de la característica. Incluye cambios de especificación propuestos, junto con la información necesaria durante el diseño y el desarrollo de la característica. Estos artículos se publican hasta que se finalizan los cambios de especificación propuestos e se incorporan en la especificación ECMA actual.
Puede haber algunas discrepancias entre la especificación de características y la implementación completada. Esas diferencias se recogen en las notas de la reunión de diseño de lenguaje (LDM) correspondientes.
Puede obtener más información sobre el proceso de adopción de especificaciones de características en el estándar del lenguaje C# en el artículo sobre las especificaciones de .
Problema planteado por el experto: https://github.com/dotnet/csharplang/issues/275
Resumen
Permitir un modificador "estático" en lambdas y métodos anónimos, que no permiten la captura de variables locales o de estado de instancia de los ámbitos que contienen.
Motivación
Evitar captar accidentalmente el estado del contexto circundante, lo que podría causar una retención no anticipada de objetos capturados o asignaciones adicionales imprevistas.
Diseño detallado
Un método lambda o anónimo puede tener un modificador static
. El modificador static
indica que el método lambda o anónimo es una función anónima estática .
Una función anónima estática no puede capturar el estado del ámbito de inclusión.
Como resultado, las variables locales, los parámetros y this
del ámbito de inclusión no están disponibles dentro de una función anónima estática.
Una función anónima estática no puede hacer referencia a miembros de instancia de una referencia this
o base
implícita o explícita.
Una función anónima estática puede hacer referencia a miembros static
del ámbito de inclusión.
Una función anónima estática puede hacer referencia a definiciones constant
del ámbito de inclusión.
nameof()
en una función anónima estática puede referirse a variables locales, parámetros o this
o base
desde el ámbito de inclusión.
Las reglas de accesibilidad para los miembros private
en el ámbito de inclusión son las mismas para las funciones anónimas static
y nostatic
.
No se garantiza si una definición de función estática anónima se emite como método static
en los metadatos. Esto se deja en la implementación del compilador para optimizar.
Una función local no static
o una función anónima no pueden capturar el estado de una función anónima estática de inclusión, pero no pueden capturar el estado fuera de la función anónima estática de inclusión.
Quitar el modificador static
de una función anónima en un programa válido no cambia el significado del programa.
C# feature specifications