Parámetros en C# - Por referencia

Supongamos ahora que queremos definir un método que intercambie el valor de sus dos argumentos. De acuerdo con el ejemplo anterior, sería hacer lo siguiente:

using System;

class Parametros {

static void Main () {

int a = 2;

int b = 3;

Console.WriteLine (”a = {O}, b = {1}”, a, b);

Intercambia (a, b);

Console.WriteLine (”a = {O}, b = {1}”, a, b);

}

static void Intercambia (int a, int b) {

int temp = a;

a = b;

b = temp;

}  }Sin embargo, nos veremos contrariados al comprobar que el programa no ejecuta ninguna acción:

a = 2, b = 3

a = 2, b = 3

Lo que ha pasado es que las operacio­nes que hemos realizado con las variables dentro del método Intercambia o no han tenido efecto. Pese a que nosotros hemos asignado nuevos valores que intercambiaban los antiguos, todo ha seguido como al principio. Lo que ocurre es que el método no altera el valor de las variables originales, ya que trabaja sobre una copia de éstas. Precisamente esto es lo que se solucio­na con la llamada por referencia de paráme­tros. Si cambiamos la defini­ción del método por:static void Intercambia (ref int a, ref int b) {

}

y si, por consiguiente, lo invocamos inclu­yendo las palabras clave ref.

Intercambia (ref a, ref b);

el resultado ahora sí es el deseado:

a = 2, b = 3

 a = 3, b = 2

Al introducir ref como prefijo de invoca­ción dé los parámetros, evitamos el efecto que comentábamos al principio. Por lo tanto, lo que hagamos sobre las variables en el método, afecta a las variables originales.

Leave a Reply