Come inserisco i parametri opzionali nei metodi?
Domanda
È possibile dichiarare parametri opzionali nei metodi?
In delphi, ad esempio, posso fare qualcosa del tipo:
procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)
Quando chiamo quella funzione posso chiamarla con quattro parametri o con due parametri:
Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;
Come è possibile in C #?
Soluzione
Temo che ciò non sia possibile in C # 1 a 3. Tuttavia, la buona notizia è che, poiché è stata una caratteristica molto richiesta (anche se ci sono sicuramente alcuni che preferirebbero non vederla), Microsoft ha finalmente ha deciso di aggiungerlo a C # 4.
La sintassi di C # 4 è la seguente:
public static void SayHello(string s = "Hello World!")
{
Console.WriteLine(s);
}
Utilizzo:
SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."
(L'ultimo esempio utilizza un argomento denominato, che in questo caso non è necessario, ma aiuta quando si hanno più parametri opzionali.)
Puoi leggere di più sull'argomento su questo post sul blog .
Altri suggerimenti
O dovrai aspettare C # 4.0 , che supporta parametri opzionali o utilizza meccanismi di sovraccarico standard:
void Test(int p1, int p2, int p3, int p4)
{ }
void Test(int p1, int p2)
{
Test(p1, p2, 2, 4);
}
Sarà possibile in C # 4.0, ma, fino a quando non verrà rilasciato, puoi aggirare il problema creando versioni sovraccaricate del tuo metodo:
public void MyMethod( int a, int b, int c )
{
...
}
public void MyMethod( int a, int b)
{
MyMethod(a, b, 4);
}
Puoi usare argomenti variabili
Usa la parola chiave 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);
}
Fatto! :)
Non puoi ancora farlo. Penso che sia un funzione di C # 4.0 .
È possibile utilizzare i parametri come soluzione, ma può essere utilizzato solo in sequenza, non nel modo in cui alcune lingue trattano i parametri predefiniti.
Usi sovraccarichi come questo
Test(int p1, int p2)
Test(int p1, int p2, int p3)
Puoi farli chiamare un metodo privato come questo
Test(int[] ps)
e quindi elaborare i dati.
Un altro modo per gestirlo è NON usare sovraccarichi / parametri opzionali, e invece nominare i metodi in base a ciò che devono fare - potrebbe sembrare un cattivo compromesso, ma probabilmente il tuo codice sarà più facile da leggere.