62 - Parámetros por referencia (ref) |
Hasta ahora habíamos visto que podemos pasar datos a un método para que sean utilizados en el mismo. Si queremos que un método retorne más de un dato es común utilizar los parámetros por referencia.
La idea central es pasar a un método las direcciones de las variables para que el método pueda modificar los datos de las variables pasadas.
Implementar un método que se le envíen dos variables y nos devuelvan sus contenidos intercambiados.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ParametrosReferencia1
{
class Program
{
public void Intercambiar(ref int valor1, ref int valor2)
{
int aux = valor1;
valor1 = valor2;
valor2 = aux;
}
static void Main(string[] args)
{
Program p = new Program();
int x1 = 10;
int x2 = 20;
Console.WriteLine("Los valores antes de intercambiar son " + x1 + " " + x2);
p.Intercambiar(ref x1, ref x2);
Console.WriteLine("Los valores después de intercambiar son " + x1 + " " + x2);
Console.ReadKey();
}
}
}
Para indicar que un parámetro es por referencia debemos anteceder la palabra clave "ref":
public void Intercambiar(ref int valor1, ref int valor2)
El objetivo fundamental de un parámetro por referencia es modificar su contenido dentro del método (asignamos valor2 a valor1 y en valor2 almacenamos el contenido de valor1):
int aux = valor1;
valor1 = valor2;
valor2 = aux;
Cuando llamamos a un método que tiene uno o más parámetros por referencia debemos anteceder la palabra ref previo a la variable:
p.Intercambiar(ref x1, ref x2);
Siempre que llamamos a un método que recibe un parámetro por referencia debe estar inicializada la variable que le pasamos:
int x1 = 10;
int x2 = 20;
Console.WriteLine("Los valores antes de intercambiar son " + x1 + " " + x2);
p.Intercambiar(ref x1, ref x2);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ParametrosReferencia2
{
class Program
{
public void Ordenados(ref int v1, ref int v2, ref int v3)
{
int menor;
int intermedio;
int mayor;
if (v1 <= v2 & v1 <= v3)
{
menor = v1;
if (v2 < v3)
{
intermedio = v2;
mayor = v3;
}
else
{
intermedio = v3;
mayor = v2;
}
}
else
{
if (v2 <= v3)
{
menor = v2;
if (v1 < v3)
{
intermedio = v1;
mayor = v3;
}
else
{
intermedio = v3;
mayor = v1;
}
}
else
{
menor = v3;
if (v1 < v2)
{
intermedio = v1;
mayor = v2;
}
else
{
intermedio = v2;
mayor = v1;
}
}
}
v1 = menor;
v2 = intermedio;
v3 = mayor;
}
static void Main(string[] args)
{
Program p = new Program();
Console.Write("Ingrese primer valor:");
int x1=int.Parse(Console.ReadLine());
Console.Write("Ingrese segundo valor:");
int x2 = int.Parse(Console.ReadLine());
Console.Write("Ingrese primer valor:");
int x3 = int.Parse(Console.ReadLine());
p.Ordenados(ref x1, ref x2, ref x3);
Console.WriteLine("Los valores ordenados de menor a mayor:");
Console.WriteLine(x1 + " " + x2 + " " + x3);
Console.ReadKey();
}
}
}