C# permite diseñar métodos que
puedan tomar cualquier número de parámetros. Para ello hay que indicar como
último parámetro del método un parámetro de algún tipo de tabla unidimensional
o dentada precedido de la palabra reservada params. Por ejemplo:
static void F(int x, params object[]
extras)
{}
Todos los parámetros de número
indefinido que se pasan al método al llamarlo han de ser del mismo tipo que la
tabla. Nótese que en el ejemplo ese tipo es la clase primigenia object,
con lo que se consigue que gracias al polimorfismo el método pueda tomar
cualquier número de parámetros de cualquier tipo. Ejemplos de llamadas válidas
serían:
F(4); //
Pueden pasarse 0 parámetros indefinidos
F(3,2);
F(1, 2, “Hola”, 3.0, new Persona());
F(1, new object[] {2,”Hola”, 3.0,
new Persona});
El primer ejemplo demuestra que
el número de parámetros indefinidos que se pasen también puede ser 0. Por su
parte, los dos últimos ejemplos son totalmente equivalentes, pues precisamente
la utilidad de palabra reservada params es indicar que se desea que la creación de
la tabla object[]
se haga implícitamente.
Es importante señalar que la
prioridad de un método que incluya el params es inferior a la de cualquier otra
sobrecarga del mismo. Es decir, si se hubiese definido una sobrecarga del
método anterior como la siguiente:
static void F(int x, int y)
{}
Cuando se hiciese una llamada
como F(3,2) se llamaría a esta última
versión del método, ya que aunque la del params es también aplicable, se considera que es
menos prioritaria.