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 operaciones 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 soluciona con la llamada por referencia de parámetros. Si cambiamos la definición del método por:static void Intercambia (ref int a, ref int b) {
…
}
y si, por consiguiente, lo invocamos incluyendo 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 invocació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.



