Métodos con un número indefinido de parámetros (usando "params")
Fecha: 21/Ene/2005 (21/Ene/05)
|
En algunas ocasiones es necesario recibir una cantidad variable de parámetros en un método ya que el número de éstos no es conveniente dejarlo fijo porque la llamada a dicho método puede ser distinta de acuerdo a las necesidades.
Por ejemplo, imaginemos para simplificar que quiero construir una función que sume todos los enteros que se le pasen. Puedo definir varias versiones de la misma, cada una de las cuales tomando un número diferente de parámetros (un entero, dos enteros, tres, etc...). Hacerlo así, obviamente, aparte de ser una pérdida de tiempo es una cuestión bastante absurda: siempre encontraríamos un límite de parámetros.
La solución en C# es muy sencilla: basta con indicarle al compilador que nuestra función necesitará un número arbitrario de parámetros, que no sabemos de antemano cuántos serán. Esto se consigue haciendo uso de la palabra clave 'params' en la definición del método. En nuestro ejemplo, una función 'Suma' que tome un número cualesquiera de enteros y los sume se definiría de la siguiente forma:
int Suma(params int[] sumandos) { int res = 0; for(int i = 0; i { res += sumandos[i]; } return res; }Observe que sólo tiene un parámetro de tipo matriz de enteros. Lo bueno es que al haber incluido la palabra clave 'params' no es necesario construir una matriz de enteros y pasársela, sino que es el compilador quien lo hace por nosotros de manera transparente simplificando mucho la llamada a la función, ya que basta con escribir algo así como:
int resultado = Suma(1,2,3,4,5,6,7);o bien:
int resultado = Suma(1,2,3,4);Como vemos se le puede pasar el número de argumentos que queramos y el compilador se encarga de convertirlo en una matriz y pasárselo al método. Muy cómodo.
Note que el método se comportará bien incluso si lo llamamos sin pasarle parámetro alguno:
int resultado = Suma();devolvería un 0.
Por favor no olvides calificar este documento en la caja de PanoramaBox que se muestra al inicio de la página.
Serge Valsse
[email protected]