Ya hablamos de algunas de las novedaes de C#7 como literales binarios, variables de salida y pattern matching, seguimos con las novedades del C# en este caso vamos a ver ref Returns y ref locals.
Una historia interesante
Si hay una cosa que me gusta mucho de estas features es que nacieron como comunidad, una propuesta en Github que se discute, se analiza, se propone y termina llegando a C#, algo impensado 5 años atrás, esto es muy interesante pensando en el futuro y la evolución del lenguaje.
Ahora sí, qué son ref returns y ref locals?
Desde siempre en C# podemos pasar parámetros por referencia así:
int val = 1; Method(ref val); Console.WriteLine(val);
Entonces el método “Method” modifica el valor de la variable val que le pasamos, es decir, utiliza el mismo espacio de memoria.
ok, sin embargo si el método retornase un valor este sería una copia, ahí entran los ref return
static ref Persona HacerAlgo(ref Persona p) { return ref p; }
Más allá de que el método no hace nada lo interesante es que nos retorna el mismo objeto (no una copia) que le pasamos, entonces dentro del método modificamos el mismo objeto que se pasó como referencia.
Para qué es útil esto?
En el caso de manipular variables muy grandes usar siempre la misma referencia puede tener un impacto positivo enorme ya que no es necesario hacer copias y reservar más memoria.
ref locals
Otra feature asociada a este es la posibilidad de declarar variables ref dentro del método para utilizarla como valores de retono ref buscardo nuevamente mejor performance.
ref Persona local = ref p;
Nos leemos!