Sie sind auf Seite 1von 3

Tipos de parmetros en C#

Parmetros Valor

Es el caso ms habitual, un mtodo acepta parmetros y devuelve un nico valor. Los


parmetros se conocen como parmetros valor, pues cuando se llama al mtodo se
enva una copia de su valor. Cualquier cambio que sufra el parmetro dentro del
mtodo no afectar al valor original.
Ejemplo:

[csharp]
static void Main(string[] args)
{
int original = 100;
mostrarDoble(original);

Console.WriteLine(Original: {0}, original);


}
static void mostrarDoble(int valorAMostrar)
{
valorAMostrar *=2;
Console.WriteLine(Doble: {0}, valorAMostrar);
}
/* SALIDA

Doble: 200
Original: 100
*/
[/csharp]
Como vemos, el parmetro valorAMostrar sufre una modificacin dentro del mtodo
pero ello no afecta a la variable original, pues es una copia de sta ltima.
Parmetros de salida

A pesar de que el caso anterior es el ms comn, hay ciertas ocasiones en las que es
til (o incluso necesario) devolver ms de un valor desde un mtodo. En este caso, un
valor puede ser devuelto usando el comando normal return y los valores adicionales
usando los parmetros de salida.
Un parmetro de salida se declara usando la palabra clave out antes del tipo y el
nombre de dicho parmetro. Para devolver un valor usando este parmetro,
simplemente se le debe asignar un valor, que ser accesible desde el cdigo que llama
al mtodo. La palabra clave out tambin debe incluirse en la llamada al mtodo.
Ejemplo:

[csharp]
static void Main(string[] args)
{
int area;
int perimetro;
area = CalculaRectangulo(5, 10, out perimetro);

Console.WriteLine(Area: {0}, area);


Console.WriteLine(Perimetro: {0}, perimetro);
}
static int CalculaRectangulo(int ancho, int altura, out int perimetro)
{
perimetro = (ancho * 2) + (altura * 2);
return ancho * altura;
}
/* SALIDA

Area: 50
Perimetro: 30
*/
[/csharp]
Parmetros por referencia

Cuando se pasa un objeto basado en alguna clase como parmetro, se hace por
referencia. Esto significa que cualquier cambio en alguna propiedad del objeto dentro
del mtodo se reflejar tambin fuera de dicho mtodo. Esto se debe a que ambos
objetos son en realidad el mismo, o ms bien sus punteros apuntan al mismo rea de
memoria.

Es posible emular este comportamiento en tipos valor declarando el parmetro


como parmetro referencia. Se hace, de forma semejante a los parmetros de salida,
con la palabra clave ref.
Ejemplo:

[csharp]
static void Main(string[] args)
{
int original = 100;
mostrarDoble(ref original);

Console.WriteLine(Original: {0}, original);


}
static void mostrarDoble(ref int valorAMostrar)
{
valorAMostrar *=2;
Console.WriteLine(Doble: {0}, valorAMostrar);
}
/* SALIDA
Doble: 200
Original: 200
*/
[/csharp]
Parmetros array

El ltimo tipo de parmetros de los mtodos es el parmetro array. Este tipo debe ser
el ltimo en la definicin del mtodo, e indica que la funcin acepta cualquier nmero
de parmetros del tipo establecido. Cada valor se combina en un array estndar que
puede ser procesado dentro del mtodo.
De nuevo, se hace necesario el uso de una palabra clave, en esta ocasin params. Se
declara como un array unidimensional aadiendo un par de corchetes al tipo del
parmetro en la definicin del mtodo.
Ejemplo:

[csharp]
static void Main(string[] args)
{
mostrarPuntuacion(Pepe, 15);
mostrarPuntuacion(Juan, 10, 12, 15, 25);
mostrarPuntuacion(Jose);
}
static void mostrarPuntuacion(string jugador, params int[] puntuaciones)
{
Console.WriteLine(Jugador: {0}, jugador);
foreach (int puntuacion in puntuaciones)
Console.Write({0}\t, puntuacion);
Console.WriteLine(\n);
}
/* SALIDA

Jugador: Pepe
15
Jugador: Juan
10 12 15 25
Jugador: Jose

*/
[/csharp]