Parámetros por valor y referencia
En algún momento nos hemos preguntado si podemos realizar un método o función que pueda retornar más de un dato. Pues bien, estrictamente esto no es posible, ya que una función solo puede retornar un valor de un tipo definido, bien sea int, string, array, boolean, etc.
Lo que podemos hacer es crear una función que reciba parámetros por referencia y de esta forma podemos modificar tantas variables como queramos dentro de la función y obtenerlas luego fuera de esta.
Expliquemoslo con un ejemplo:
Parámetros por Valor:
1 2 3 4 | public function operar(dato1, dato2){ dato1++; dato2--; } |
Como vemos tenemos un método que aplica una operación a ambos parámetros, si llamamos este método de la siguiente forma el resultado será el siguiente:
1 2 3 4 5 6 7 | var dato1 = 5; var dato2 = 2; this.operar(dato1, dato2); //Resultados: //dato1 = 5 //dato2 = 2; |
Como vemos los resultados son los mismos ya que cuando definimos un método que recibe argumentos por valor se crea una copia de la variable en un nuevo espacio de memoria lo cual las operaciones que hagamos sobre esta variable afectarán el nuevo espacio de memoria y no el espacio de la variable inicial.
Parámetros por Referencia:
Ahora hagamos el mismo ejemplo pero pasando argumentos por referencia
1 2 3 4 | public function operar(ref dato1, ref dato2){ dato1++; dato2--; } |
Al llamar este método tenemos lo siguiente:
1 2 3 4 5 6 7 | var dato1 = 5; var dato2 = 2; this.operar(ref dato1, ref dato2); //Resultados: //dato1 = 6 //dato2 = 1; |
Ahora si vemos como se refleja las operaciones que realizamos en el método, eso se debe a que al invocar este método se están modificando los mismos espacios de memoria que tenían las variables originales, de tal modo que si se cambia el valor de alguna variable al interior de una función este nuevo valor se verá reflejado fuera de la función.
Fuente | http://www.elguille.info/NEt/cursocsharperik/Entrega6/Entrega6.htm