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(); } } }