Pregunta

¿Es posible declarar parámetros opcionales en los métodos?

En Delphi, por ejemplo, puedo hacer algo como:

procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)

Cuando llamo a esa función, puedo llamarla con cuatro parámetros o con dos parámetros:

Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;

¿Cómo es eso posible en C #?

¿Fue útil?

Solución

Me temo que esto no es posible en C # 1 a 3. Sin embargo, la buena noticia es que debido a que ha sido una característica muy demandada (aunque ciertamente hay algunos que prefieren no verla), Microsoft finalmente ha decidió agregarlo a C # 4.

La sintaxis de C # 4 es la siguiente:

public static void SayHello(string s = "Hello World!")
{
    Console.WriteLine(s);
}

Uso:

SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."

(El último ejemplo usa un argumento con nombre, que realmente no es necesario en este caso, pero ayuda cuando tiene múltiples parámetros opcionales).

Puede leer más sobre ese tema en esta publicación de blog .

Otros consejos

Tendrás que esperar C # 4.0 , que admite parámetros opcionales, o utiliza mecanismos de sobrecarga estándar:

void Test(int p1, int p2, int p3, int p4)
{ }

void Test(int p1, int p2)
{
    Test(p1, p2, 2, 4);
}

Será posible en C # 4.0, pero, hasta que se publique, puede solucionarlo creando versiones sobrecargadas de su método:

public void MyMethod( int a, int b, int c )
{
    ...
}

public void MyMethod( int a, int b)
{
   MyMethod(a, b, 4);
}

Puede usar argumentos variables

Use la palabra clave params.

void paramsExample(params int[] argsRest)
{

 if(argsRest.Length == 2) then...
 else if(argsRest.Length == 4) then...
 else error...

}
using System;
using System.Runtime.InteropServices;

   public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
   {
      Console.WriteLine(s);
   }

¡Listo! :)

No puedes hacer eso todavía. Creo que es un función de C # 4.0 .

Puede usar params como una solución alternativa, pero eso solo puede usarse secuencialmente, no de la forma en que algunos idiomas tratan los parámetros predeterminados.

Usas sobrecargas como esta

Test(int p1, int p2)
Test(int p1, int p2, int p3)

Puede hacer que llamen a un método privado como este

Test(int[] ps)

y luego procese los datos.

Otra forma de manejar esto es NO usar sobrecargas / parámetros opcionales y, en su lugar, nombrar los métodos de acuerdo con lo que deben hacer; puede parecer una mala compensación, pero su código probablemente será más fácil de leer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top