Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Por Referencia
Una variable de tipo referencia no contiene directamente los datos, contiene una referencia
a ellos. El paso de parámetros por referencia permite a los miembros de funciones,
métodos, propiedades, indizadores, operadores y constructores, cambiar el valor de los
parámetros y hacer que ese cambio persista.
Para pasar un parámetro por referencia, se debe usar una de las palabras clave Ref u Out.
Por ejemplo:
Para pasar un argumento a un parámetro Ref, primero debe inicializarse. Esto es diferente
de Out, cuyo argumento no tiene que inicializarse explícitamente antes de pasarlo.
class EjemploRef
{
static void Funcion1(Ref int dato)
{
dato = 3;
}
static void Main()
{
int valor = 0; // Es necesario inicializar la variable
Funcion1(Ref valor); // Variable pasada por referencia
System.Console.WriteLine("El valor es: {0}", valor); // valor a
cambiado a 3
}
}
Como se dijo anteriormente, Out no requiere que se inicialice la variable antes de pasarla.
Al utilizar un parámetro Out, la definición de método y el método de llamada deben utilizar
explícitamente la palabra clave out.
class EjemploOut
{
static void Funcion2(Out int dato)
{
dato = 3;
}
static void Main()
{
int valor; // No es necesario inicializar la variable
Funcion2(Out valor); // Variable pasada por referencia
System.Console.WriteLine("El valor es: {0}", valor); // valor a
cambiado a 3
}
}
Por Valor
Una variable de tipo de valor contiene directamente los datos, a diferencia de una variable
de tipo de referencia, que contiene una referencia a los datos. Por lo tanto, pasar una
variable de tipo de valor a un método significa pasar una copia de la variable al método.
Cualquier cambio en el parámetro que se produzca dentro del método no afectará a los
datos originales almacenados en la variable.
class EjemploVal
{
static void Funcion3(int dato)
{
dato = 3;
}
static void Main()
{
int valor = 0; // Variable inicializada en 0
Funcion3(valor); // Variable pasada por valor
System.Console.WriteLine("El valor es: {0}", valor); // valor
sigue siendo 0
}
}
Bueno, esto se debe a que el compilador no pudo comprobar que al parámetro out se le
hubiera asignado a un valor antes de utilizarlo, es decir, no se asignó un valor a un
parámetro marcado con la palabra clave out en el cuerpo del método. Pero aquí se nos
crearía un problema si lo que deseamos es primero leer el valor antes de cambiarlo, por lo
tanto en estos casos no nos va a servir el uso de out, entonces la solución es utilizar un
parámetro ref en su lugar.
Saludos, Toby