Parámetros por valor y por referencia

Byref y ByVal
Oscar Hernando Barón Roa
 Parámetros por valor y por referencia
Byref y ByVal
Visitas:12902
Fecha publicación:4/10/2008 9:00:48 PM
Tanto en Visual Basic para .NET como en C#, de forma predeterminada, los parámetros son por valor, es decir, se pasa como argumento una copia del valor del parámetro. En Visual Basic, se puede usar la instrucción ByVal para indicar que el parámetro es por valor, de hecho, el propio IDE de Visual Basic siempre añade esa instrucción si no indicamos nada. Cuando nos interese que podamos modificar el valor de un parámetro, por ejemplo para asignarle un nuevo valor, podemos usar los parámetros por referencia. En Visual Basic se indican con la instrucción ByRef, y en C#, se pueden indicar de dos formas, usando ref o bien usando out. La diferencia entre ref y out es que los argumentos pasados a parámetros ref deben estar previamente iniciados, es decir, deben tener algún valor; mientras que los parámetros out no es necesario que lo estén, y esa inicialización o asignación, hay que hacerla en el propio método.
 
No debemos confundir los parámetros por referencia con los tipos por referencia, ya que un parámetro por referencia puede ser de un tipo por valor, como Integer o Double. De hecho, cuando usamos tipos por referencia, no es necesario usar la instrucción ByRef para poder modificar el contenido de ese parámetro, ya que al ser un tipo por referencia, lo que se pasa es precisamente una referencia a la dirección de memoria en la que está dicho objeto, por tanto siempre tendremos acceso al contenido.
 
Debido a la forma que Visual Basic trata las declaraciones de las variables, en teoría no se podrían usar parámetros de tipo out, por tanto el equivalente más directo en C# es ref. Pero ambos parámetros se pueden "simular" en Visual Basic por medio de ByRef. A la hora de usar los métodos con parámetros por referencia, la diferencia entre los dos lenguajes, es que en C# siempre tenemos que usar la instrucción out o ref que corresponda con la definición del parámetro, mientras que en Visual Basic no se debe usar la instrucción ByRef para usar un método que espere valores por referencia. Veamos un método que recibe parámetros por valor y por referencia y cómo lo definiríamos en los dos lenguajes:
 
Codigo VB:
 
Codigo en C#:
 
Como ves, en Visual Basic no hace falta indicar si el argumento se pasa a un parámetro por referencia o no, sin embargo en C# es obligatorio indicar si ese parámetro es ref, usando esa misma instrucción, si no lo hacemos, el compilador nos avisará que debemos hacerlo.
 
Comentarios:
  • Comentario:


Contenido relacionado