C# parametri opzionali

lunedì 06 novembre 2006 - 09.50

contiello Profilo | Senior Member

Salve ragazzi ho il seguente problema ho sempre lavorato in vb.net oggi mi trovo nella condizione di lavorare in c#....

ho la seguente domanda da porvi....

come si passano alle funzioni parametri opzionali???

io con vb facevo in questo modo

function Prova (elemento1 as integer,elemento2 as integer ,optional elementoopzionale as string="")

come si dichiara la stessa funzione in c#?
grazie

Brainkiller Profilo | Guru

>come si passano alle funzioni parametri opzionali???
>come si dichiara la stessa funzione in c#?

Non sono supportati in C# allo stesso modo. Però puoi utilizzare la Keyword params per simulare la stessa cosa. Qui trovi istruzioni ed esempi:
http://msdn2.microsoft.com/en-us/w5zay9db.aspx
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

paolopat Profilo | Junior Member

scusatemi ma non vedo l'utilità della keyword params , ad esempio in :

public static void UseParams2(params object[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}


potrei non utilizzarla proprio !

Brainkiller Profilo | Guru

>scusatemi ma non vedo l'utilità della keyword params , ad esempio
>potrei non utilizzarla proprio !

Si, il problema è che l'hai utilizzata proprio nella prima riga:
public static void UseParams2(params object[] list)



David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

freeteo Profilo | Guru

ciao,
io userei il classico overload cosi' vai via tranquillo:

private string Prova (int elemento1, int elemento2) { return Prova(elemento1,elemento2,""); } private string Prova (int elemento1, int elemento2, string opzionale) { ...

se ti da fastidio vedere tutti e 2 le dichiarazioni, le racchiudi in una region e la chiudi
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

paolopat Profilo | Junior Member

no scusa....questo non è codice mio....è l'esempio della guida MSDN....e non ne vedo assolutamente l'utilità, visto che passando come parametro un array di object, posso metterci all'interno quanti parametri voglio e di tipi diversi da poter recuperare opportunamente tramite casting all'interno del metodo....mi sembra proprio inutile questo params...ma se esiste, ci sarà un motivo ?

Brainkiller Profilo | Guru

>visto che passando
>come parametro un array di object, posso metterci all'interno
>quanti parametri voglio e di tipi diversi da poter recuperare
>opportunamente tramite casting all'interno del metodo....mi sembra
>proprio inutile questo params...ma se esiste, ci sarà un motivo?

C'è una differenza sostanziale fra ciò che tu dici e ciò che params fa ed è spiegato in questo breve codice d'esempio:

private void CallMethod() { Test1(1,2,3); // Questa chiamata fallisce perchè prevede un overload Test2(1,2,3); // Questa chiamata tramite params funziona return; } private void Test1(int[] a) { return; } private void Test2(params int[] a) { return; }

Il metodo Test1 è l'array di int (o object) tua soluzione, il Test2 invece fa uso del params. La keyword params è fatta apposta per simulare un numero variabile di parametri, mentre l'uso di array è un'altra cosa che può essere anche usata come artifizio per simulare anch'esso l'uso di parametri opzionali ma è una cosa ben diversa.

Infatti a compile time per usare il tuo metodo dovrai creare un array e impacchettargli all'interno i valori, mentre chiamando il metodo che fa uso di params puoi scrivere inline tutti i parametri che vuoi esempio:

Test2(1,2,3); Test2(1,2,3,4,5);

In definitiva, non è così inutile come dici tu.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

paolopat Profilo | Junior Member

giusto ! hai perfettamente ragione...non devo passare l'array di oggetti ma gli oggetti stessi come dei normali parametri....ecco...allora un'utilità c'è....grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5