Sie sind auf Seite 1von 3

Por Referencia Una variable de tipo referencia no contiene directamente los datos, contiene una referencia a ellos.

El paso de parmetros por referencia permite a los miembros de funciones, mtodos, propiedades, indizadores, operadores y constructores, cambiar el valor de los parmetros y hacer que ese cambio persista. Para pasar un parmetro por referencia, se debe usar una de las palabras clave Ref u Out. Por ejemplo:
static { // } . static { // } void Funcion1(Ref int dato) codigo... void Funcion2(Out int dato) codigo...

Para pasar un argumento a un parmetro Ref, primero debe inicializarse. Esto es diferente de Out, cuyo argumento no tiene que inicializarse explcitamente antes de pasarlo. Aunque Ref y Out se tratan de manera diferente en tiempo de ejecucin, se tratan de la misma manera en tiempo de compilacin. Por consiguiente no se pueden sobrecargar los mtodos si un mtodo toma un argumento Ref y el otro toma un argumento Out. El siguiente ejemplo muestra como trabajar con Ref:
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 parmetro Out, la definicin de mtodo y el mtodo de llamada deben utilizar explcitamente la palabra clave out. El siguiente ejemplo muestra como trabajar con 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 mtodo significa pasar una copia de la variable al mtodo. Cualquier cambio en el parmetro que se produzca dentro del mtodo no afectar a los datos originales almacenados en la variable. El siguiente ejemplo muestra como trabajar pasando parmetros por valor:
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 } }

Como pueden observar, la variable valor es inicializada en cero. Cuando se invoca a la Funcion3, el contenido de valor se copia en el parmetro dato, el cual se cambia dentro del mtodo. Sin embargo, en Main, el valor de la variable valor es el mismo, antes y despus de llamar al mtodo Funcion3, es decir, el cambio que se produce dentro del mtodo slo afecta a la variable local dato. Tal vez en ocaciones al usar el out tengan los siguientes errores: Error del compilador CS0269 "Uso del parmetro out sin asignar 'parmetro'" Error del compilador CS0177 "Es necesario asignar el parmetro 'parmetro' out antes de que el control abandone el mtodo actual" Bueno, esto se debe a que el compilador no pudo comprobar que al parmetro out se le hubiera asignado a un valor antes de utilizarlo, es decir, no se asign un valor a un parmetro marcado con la palabra clave out en el cuerpo del mtodo. Pero aqu se nos creara 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 solucin es utilizar un parmetro ref en su lugar.

Das könnte Ihnen auch gefallen