Question

Est-il possible de déclarer des paramètres facultatifs dans les méthodes?

Dans Delphi, par exemple, je peux faire quelque chose comme:

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

Lorsque j'appelle cette fonction, je peux l'appeler avec quatre paramètres ou avec deux paramètres:

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

Comment est-ce possible en C #?

Était-ce utile?

La solution

Je crains que cela ne soit pas possible dans les versions 1 à 3. Cependant, la bonne nouvelle est que, parce que cette fonctionnalité est très demandée (même si certains préféreraient ne pas la voir), Microsoft a finalement décidé de l'ajouter à C # 4.

La syntaxe C # 4 est la suivante:

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

Utilisation:

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

(Le dernier exemple utilise un argument nommé, ce qui n'est pas vraiment nécessaire dans ce cas, mais qui aide lorsque vous avez plusieurs paramètres facultatifs.)

Vous pouvez en savoir plus sur ce sujet sur cet article de blog .

Autres conseils

Vous devrez soit attendre C # 4.0 , qui prend en charge les paramètres facultatifs ou utilise des mécanismes de surcharge standard:

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

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

Cela sera possible en C # 4.0, mais vous pouvez contourner le problème en attendant que cela soit publié en créant des versions surchargées de votre méthode:

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

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

Vous pouvez utiliser des arguments variables

Utilisez le mot clé 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);
   }

Fait! :)

Vous ne pouvez pas encore le faire. Je pense que c'est un fonctionnalité de C # 4.0 .

Vous pouvez utiliser les paramètres comme solution de contournement, mais cela ne peut être utilisé que de manière séquentielle, et non de la manière dont certaines langues traitent les paramètres par défaut.

Vous utilisez des surcharges comme ceci

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

Vous pouvez leur demander d'appeler une méthode privée comme celle-ci

Test(int[] ps)

puis traitez les données.

Une autre façon de gérer cela consiste à NE PAS utiliser les paramètres overloads / optional, mais plutôt nommer les méthodes en fonction de ce qu'elles doivent faire. Cela peut sembler être un mauvais compromis, mais votre code deviendra probablement plus facile à lire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top