2010-08-14 16 views
10

¿Cómo puedo hacer que un método tenga valores predeterminados para los parámetros?Parámetros de método predeterminados en C#

+1

posible duplicado de [? ¿Cómo puede utilizar parámetros opcionales en C#] (http://stackoverflow.com/ questions/199761/how-can-you-use-optional-parameters-in-c) –

Respuesta

6

Simplemente declara con los valores por defecto - se les llama optional parameters:

public void myMethod(string param1 = "default", int param2 = 3) 
{ 
} 

Esto fue introducido en C# 4.0 (por lo que tendrá que utilizar Visual Studio 2010).

+0

@Ardman: OP puede significar C# 4. – dalle

14

Sólo se puede hacer esto en C# 4, que introdujo tanto named arguments and optional parameters:

public void Foo(int x = 10) 
{ 
    Console.WriteLine(x); 
} 

... 
Foo(); // Prints 10 

Tenga en cuenta que el valor por defecto tiene que ser una constante - ya sea una constante de lo normal en tiempo de compilación (por ejemplo, un literal) o:

  • El constructor sin parámetros de un valor de tipo de
  • default(T) para algún tipo T

También tenga en cuenta que el valor predeterminado está incrustado en el ensamblador del llamador (asumiendo que omite el argumento relevante) - por lo que si cambia el valor predeterminado sin reconstruir el código de llamada, aún verá el valor anterior.

Esto (y otras características nuevas en C# 4) están cubiertos en la segunda edición de C# in Depth. (. Capítulo 13 en este caso)

+0

El enlace al libro 'C# in Depth' es incorrecto. El sitio web 'manning.com' devuelve un archivo PHP que redirige a un sitio web que no se puede cargar. –

+1

@NikolayKostov: Humbug - programa afiliado cambiado hace un tiempo. He incluido un enlace más simple aquí. –

2

Una solución sencilla es sobrecargar el método:

private void Foo(int length) 
{ 
} 

private void Foo() 
{ 
    Foo(20); 
} 
+0

Esta sigue siendo una buena solución, incluso en C# 4. Una ventaja de esto es que los valores predeterminados están integrados en su conjunto en lugar de los llamadores; ver la respuesta de Jon para más detalles. –

+0

@Dan: me he vuelto cada vez más escéptico sobre el * real * daño del problema "no se puede cambiar los valores predeterminados" ... porque para la mayoría de los códigos, espero que toda la aplicación se vuelva a compilar de todos modos. Es algo que vale la pena conocer, pero no creo que sea realmente un gran problema. –

+0

@Jon, me inclino a estar de acuerdo contigo, ya que creo que probablemente sea una mala práctica confiar en valores predeterminados particulares, en cualquier caso, ya que eso parece indicar que la naturaleza de la API ha cambiado. Si ese es el caso, el cliente probablemente necesite cambiar de todos modos. –

Cuestiones relacionadas