C# 8.0 – Specification – Static Local Functions
Índice general – C# 8.0 – Specification
A partir de C# 7.0, Microsoft introdujo el soporte a funciones locales o Local Functions.
El objetivo es declarar métodos privados anidados dentro de otro miembro.
Para más información, te invito a leer esta información oficial de Microsoft al respecto.
Un ejemplo de Local Function en C# 7.x sería el siguiente:
// Antes de C# 8.0 (este código funciona en C# 7.2 ó superior)
public static string LocalFunction()
{
var name = "Tom";
var age = 27;
return MyLocalFunction();
string MyLocalFunction() => $"{name} is {age} years old";
}
Este código que funcionaría en C# 7.2 ó superior, corresponde con un método que dentro del mismo tiene una función cuyo ámbito y contexto es la misma función principal.
Una particularidad de este ejemplo es que desde dentro de la función, podemos «ver» y «acceder» a las variables declaradas en el método contenedor padre o principal.
Esto que puede representar según el caso ciertas ventajas, en otras circunstancias puede ser todo lo contrario.
Una posible solución podría ser declarar la función local como static, pero si hacemos esto, el compilador nos devolverá un error.
Así que para resolver esta problemática, en C# 8.0 se ha incluido lo que se denomina como Static Local Functions, que no es otra cosa que dar la posibilidad de declarar la Local Function como static.
Así que el código que veíamos antes, seguirá siendo válido en C# 8.0 pero con la salvedad de que ahora podemos hacer esto otro también:
// C# 8.0
public static string StaticLocalFunction()
{
var name = "Tom";
var age = 27;
return MyLocalFunction(name, age);
static string MyLocalFunction(string myName, int myAge) =>
$"{myName} is {myAge} years old";
}
Si dentro de la función local declarada como estática tratamos de acceder a «name» o «age«, no podremos.
De esta manera, mantenemos cierta integridad en nuestro código, si ese es el propósito que buscamos.
Como podemos apreciar, en este caso esta nueva característica viene a ampliar la ya existente, ampliando su soporte y dando más opciones a los desarrolladores.
Happy Coding!