https://www.infoworld.com/article/3182416/c-7-in-depth-exploring-local-functions.html
Realmente necesito saber exactamente cómo se supone que deben ser las funciones locales siguiendo el código.
Soy 0% Código IL/Experiencia MSIL.
public static void Display(string str) { int ctr = 5; DisplayText(); void DisplayText () { for(int i = 0; i < ctr; i++) Console.WriteLine(str); } }Pregunta que necesito saber aquí del código anterior:
Display() , ¿la función local DisplayText() siempre se genera cuando se llama a la principal? ¿O se creó como una función local falsa en C# pero en MSIL se generó como una función global?Editar: - Creo que Propiedades locales (que aún no existen o tal vez ...). es útil también a veces. que puede tener algún cálculo en el mismo método que una propiedad local. como ejemplo anterior pero DisplayText son propiedad. Ojalá lo agreguen también.
CIL y el tiempo de ejecución no tienen el concepto de una función local, sino que el compilador de C# lo traduce a un método normal con visibilidad privada y, potencialmente, una clase/estructura utilizada para compartir el estado con el método de declaración. Puede ver esto por sí mismo compilando el código y luego descompilando el ensamblado, o usando un sitio como SharpLab.io .
Las expresiones lambda y los métodos anónimos son muy similares, excepto que necesitan proporcionar un delegado que puede limitar las oportunidades de optimización.
El compilador se esfuerza mucho en optimizar el código generado, no esperaría que los métodos locales afecten el rendimiento mucho más de lo que obtendría con cualquier otro método. Le sugiero que se concentre más en cómo afecta la capacidad de mantenimiento, al menos hasta que pueda identificar un problema de rendimiento real mediante la creación de perfiles.