Nel .NET Framework è abbastanza frequente trovare classi con metodi che accettano molti parametri, i quali di conseguenza, danno origine a molti overload per fornire dei parametri predefiniti. Con la versione 4.0 di C# non dobbiamo più scrivere tutti quei metodi dato che sarà possibile rendere opzionali i parametri di un metodo. Per sfruttare questa funzionalità basterà assegnare al parametro, direttamente nella firma del metodo, un valore predefinito. Vediamo un esempio creando un'applicazione di tipo console e dichiarando nella classe Program il seguente metodo Process.
private static void Process(int p_1 = 10, string p_2 = "prova", double p_3 = 12.34)
{
Console.WriteLine("Parametri: {0}, {1}, {2}", p_1, p_2, p_3);
}
L'unica responsabilità del metodo è quella di stampare a video i valori dei quattro parametri, dei quali solo il primo non è opzionale. Possiamo invocare il precedente metodo passando solo i parametri che ci interessano lasciando gli altri invariati. Di seguito vediamo tutte le possibili invocazioni ed il relativo output.
Process(1, "hello", 5.6); //Parametri: 1, hello, 5.6 Process(1, "hello"); //Parametri: 1, hello, 12.34 Process(1); //Parametri: 1, prova, 12.34 Process(); //Parametri: 10, prova, 12.34
L'unico vincolo imposto da questa funzionalità riguarda il valore predefinito, il quale deve essere costante in fase di compilazione.
I parametri nominali sono la diretta conseguenza dell'introduzione dei parametri opzionali: anche se possiamo indicare valori predefiniti per i parametri di un metodo non possiamo effettuare invocazioni omettendo i parametri iniziali o centrali.
Quindi prendendo come esempio sempre il metodo Process, non sarà possibile effettuare le seguenti invocazioni.
Process(,"test",1.5); //Errore: Argument missing Process(5,,1.5); //Errore: Argument missing
L'impossibilità è dovuta ad una scelta di design da parte del team di C#, il quale giustamente, reputava illeggibile codice di questo tipo.
Grazie ai parametri nominali possiamo indicare, al momento dell'invocazione di un metodo, quali valori assegnare a determinati parametri, selezionati in base al nome del parametro stesso. Possiamo superare il vincolo riscontrato nel precedente frammento di codice così:
Process(p_2: "test", p_3: 1.5); Process(5, p_3: 1.5);
Inoltre grazie a questa funzionalità possiamo anche cambiare l'ordine di assegnazione dei parametri.
Process(p_3: 1.5, p_1: 5, p_2: "test");
Sia i parametri opzionali, già presenti in Visual Basic (sin dalla versione 6) e nei linguaggi nativi, sia i parametri nominali, sono semplici funzionalità che migliorano l'esperienza di sviluppo e la leggibilità del codice in tutti gli scenari di interoperabilità fra questi ambienti, ad esempio nell'uso di librerie COM come le Office Automation API.
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |