Cuantos quebraderos de cabeza ha llegado a dar el paso de parámetros por referencia a los estudiantes de C.

Aquel elemento conocido como puntero que hacía que la asistencia a clase se dividiese por dos, y esto son palabras textuales del profesor que tuve en primero de carrera…, lo gracioso de todo es que fue verdad.

El paso de parámetros por valor en C# la verdad es que es algo muy sencillo.

Cuando pasamos un parámetro por valor, este tendrá un valor antes de la llamada del método, dentro del método será modificado (en realidad, el compilador realiza una copia del dato original y se modifica esta copia) y tras la ejecución, el parámetro tendrá su valor original.

Lo más sencillo es velor con un ejemplo.

Programa principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace ConsoleApplication1
 {
 class Program
 {
 static void Main(string[] args)
 {
 int num = 0;
 Console.WriteLine("Antes del metodo: {0}",num);
 Class1 clase = new Class1();
 clase.metodo(num);
 Console.WriteLine("Despues del metodo: {0}", num);
 string a = Console.ReadLine();
 }
 }
 }

Clase.

1
2
3
4
5
6
7
8
9
10
11
namespace ConsoleApplication1
{
 class Class1
 {
 public void metodo(int num)
 {
 num = num + 5;
 Console.WriteLine("Dentro del metodo: {0}", num);
 }
 }
}

Como podemos observar, en el programa principal declaramos una variable entera, la cual pasamos a un método que la modifica y, finalmente, obtenemos el siguiente resultado.


El paso de datos por referencia en C# es tan fácil como poner out o ref delante del parámetros que estemos utilizando. De esta forma, a diferencia del método anterior, las modificaciones se hacen sobre el mismo valor original que tenemos en memoria.

La diferencia entre ref y out es que, el valor que pasemos con ref debe ser inicializado antes de mandarlo al método, con out, el dato puede pasarse sin inicializar no tomando el cuenta el valor original del dato y actuando como si dicho dato no estuviese inicializado.

Programa principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace ConsoleApplication1
{
 class Program
 {
 static void Main(string[] args)
 {
 int num = 0;
 Console.WriteLine("Antes del metodo: {0}",num);
 Class1 clase = new Class1();
 clase.metodo(ref num);
 Console.WriteLine("Despues del metodo: {0}", num);
 string a = Console.ReadLine();
 }
 }
}

Clase:

1
2
3
4
5
6
7
8
9
10
11
namespace ConsoleApplication1
{
 class Class1
 {
 public void metodo(ref int num)
 {
 num = num + 5;
 Console.WriteLine("Dentro del metodo: {0}", num);
 }
 }
}

Resultado:

Como ya se ha comentado, podemos utilizar out con variables no inicializadas. Como es lógico, si intentamos trabajar con dicha variable sin haberle asignado ningún valor, el compilador arrojará un error. Dicha asignación debe hacerse antes de que el método que lo llama retorne, si no, ¿que significado tendría?.

Al ser el paso de parámetro por referencia, una vez terminada la ejecución del método, la variable original tendrá el valor que se le haya asignado dentro de la función.

2 Responses to “Paso de parámetros por valor y referencia en C# (.NET)”
  1. jesus rodriguez says:

    gracias de gra ayuda

  2. Jéssica Rico says:

    Excelente explicación… definitivamente genial… Muchas gracias por compartir… 😛 Saludos!

  3.  
Leave a Reply


   Beat diabetes   Diabetes diet