TOC

This article has been localized into Spanish by the community.

Los pasos básicos:

Parámetros de función

Parámetros de Funciones

La primera cosa que debemos tomar en cuenta, son los modificadores out y ref. En C#, así como en otros lenguajes, existen dos formas diferentes de pasar argumentos: "por valor" y "por referencia". Por defecto, en C# es "por valor". Lo cual básicamente significa que cuando pasas una variable en la llamada de una función, estás enviando en realidad una copia del objeto, en lugar de una referencia a éste. Esto también significa que puedes modificar la variable dentro de la función llamada, sin afectar al valor original del objeto que pasaste como argumento.

Con las palabras claves ref y out, podemos cambiar este comportamiento, así pasamos una referencia del objeto en lugar de solo una copia.

El modificador ref

Piensa en el siguiente ejemplo:

static void Main(string[] args)
{
    int number = 20;
    AddFive(number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(int number)
{
    number = number + 5;
}

Creamos una variable Integer, asignamos el número 20 a la variable y la usamos en el método AddFive(), el cual suma 5 al valor de la variable. ¿Pero de verdad suma el número 5 a su valor? No. El valor que asignamos a la variable en el método nunca sale de éste, porque solamente pasamos una copia del valor del objeto en lugar de una referencia al objeto. Así es como C# funciona y en muchos casos, es muy útil. Pero aquí, lo que en realidad queremos es modificar el valor de la variable original que pasamos como argumento a nuestra función. Así que escribimos la palabra clave ref:

static void Main(string[] args)
{
    int number = 20;
    AddFive(ref number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(ref int number)
{
    number = number + 5;
}

Como puedes ver, lo único que hicimos es añadir la palabra clave ref en el encabezado de la función así como en la sentencia de llamada a la función. Si corremos el programa con estas modificaciones, verás que el valor de la variable original cambió después de que se ejecutó la llamada a la función.

El modificador out

El modificador out trabaja en forma semejante al ref. Los dos aseguran que el parámetro sea pasado como referencia en lugar de serlo por valor, pero tienen dos diferencias importantes. Un valor pasado como modificador ref tiene que ser inicializado antes de llamar el método - esto no es verdad para el modificador out, donde puedes usar un valor no inicializado. Por otro lado, no puedes dejar una llamada de función con un parámentro out sin asignarle un valor al mismo. Como puedes pasar valores no inicializados como parámetros out, no puedes usar realmente un parámetro out dentro de una función - solamente puedes asignarle un nuevo valor.

Si usas o no 'out' o 'ref' depende de la situación, como te darás cuenta una vez que comiences a usarlos. Ambos son típicamente usados para resolver la cuestión de que sólo se puede regresar un valor de una función con C#.

Usar el modificador 'out' es como usar el 'ref', como aparece arriba. Simplemente usas la clave 'out' en lugar de la 'ref'. En el ejemplo anterior, recuerda quitar el valor asignado al número en el método y, en lugar de eso, decláralo en la llamada de la función.

Los parametros (params) modificadores

Hasta aqui todas nuestras funciones han aceptado una cantidad fija de parametros. Sin embargo, en algunos casos, podrias necesitar un funcion que tome un numero arbitrario de paramentros. Esto podria ser hecho aceptando una formacion o lista como parametro, por ejemplo la siguiente

static void GreetPersons(string[] names) { }

Pero, llamarla seria un poco torpe. En la forma mas corta podria lucir como sigue:

GreetPersons(new string[] { "John", "Jane", "Tarzan" });

Esto es aceptable, pero puede hacerse de forma mas inteligente con la clave 'params'

static void GreetPersons(params string[] names) { }

Entonces, llamarla luciría así:

GreetPersons("John", "Jane", "Tarzan");

Otra ventaja de usar la clave 'params', es que también puedes pasarle cero parámetros. Funciones con 'params' incluso pueden recibir otros parámetros, siempre y cuando el parámetro con la clave 'params' sea el último. Además de eso, sólo un parámetro con la clave 'params' puede ser usado por función. Aquí está el último y más completo ejemplo:

static void Main(string[] args)
{
    GreetPersons(0);
    GreetPersons(25, "John", "Jane", "Tarzan");
    Console.ReadKey();
}

static void GreetPersons(int someUnusedParameter, params string[] names)
{
    foreach(string name in names)
Console.WriteLine("Hello, " + name);
}
This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!