Compartir a través de


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.