2010-10-12 15 views
47

Posso dare i parametri di default in C#?Posso assegnare un valore predefinito ai parametri o ai parametri opzionali nelle funzioni C#?

In C:

void fun(int i = 1) 
{ 
    printf("%d", i); 
} 

Possiamo dare parametri un valore di default? È possibile in C#? In tal caso, possiamo evitare di sovraccaricare le funzioni?

È sempre una cattiva pratica aggiungere un parametro facoltativo a una funzione esistente. Se si sta lavorando su un progetto che deve riferirsi alla classe che ha una funzione e abbiamo modificato un parametro con un valore facoltativo, può generare un'eccezione di run time che il metodo non viene trovato.

Questo perché considereremo che se aggiungiamo un valore facoltativo aggiuntivo, non è richiesto alcun cambio di codice se la funzione viene utilizzata in molti posti.

function Add(int a, int b); 

Questo sarà chiamato utilizzando in questo modo:

Add(10, 10); 

Ma se si aggiunge un parametro opzionale come questo,

function Add(int a, int b, int c = 0); 

il compilatore si aspetta

Add(10, 10, 0); 

In realtà stiamo chiamando come questo Add(10, 10) e questa funzione non sarà disponibile in quella classe e causa un'eccezione di run time.

Ciò accade durante l'aggiunta di un nuovo parametro a una funzione chiamata da molti punti e non sono sicuro che ciò accada ogni volta. Ma ti suggerisco di sovraccaricare la funzione.

Sempre è necessario sovraccaricare il metodo che ha un parametro opzionale. Inoltre, se stai lavorando con funzioni che hanno più di un parametro opzionale, allora è bene passare il valore usando il nome del parametro.

function Add(int a, int b, int c = 0); 

È sempre utile chiamare questa funzione nel seguente modo.

Add(10, 20, c:30); 
+1

Hai provato? –

+1

Questo è C++, non C. – leppie

+0

Cosa stai chiedendo? .. –

risposta

55

che è esattamente come lo si fa in C#, ma la funzione è stato aggiunto nel .NET 4.0

+2

È possibile utilizzarlo in .NET 3.5 –

+0

'Visual Studio 2010 +' ha 'msbuild' con funzionalità' multitargeting' (https://msdn.microsoft.com/en-us/library/vstudio/ee395432(v= VS.100) aspx). Può utilizzare i pacchetti di destinazione per '.NET 4.0' per creare i parametri facoltativi in ​​una serie di metodi sovraccaricati. – dbardakov

+0

E i metodi inline (Func, Action, delegate)? – EricG

5

Sì, ma è necessario essere utilizzando .NET 3.5 e C# 4.0 per ottenere questo funzionalità.

This MSDN page ha ulteriori informazioni.

26

Sì. Vedi Named and Optional Arguments. Si noti che il valore predefinito deve essere una costante, quindi questo è OK:

public string Foo(string myParam = "default value") // constant, OK 
{ 
} 

ma non è questo:

public void Bar(string myParam = Foo()) // not a constant, not OK 
{ 
} 
0

questa è una caratteristica di C# 4.0, ma non è stato possibile senza l'uso della funzione sovraccarico prima di quella versione.

26

È possibile solo da C# 4.0

Tuttavia, quando si utilizza una versione di C#, prima di 4.0, è possibile aggirare il problema utilizzando metodi di overload:

public void Func(int i, int j) 
{ 
    Console.WriteLine (String.Format ("i = {0}, j = {1}", i, j)); 
} 

public void Func(int i) 
{ 
    Func (i, 4); 
} 

public void Func() 
{ 
    Func (5); 
} 

(In alternativa, è possibile effettuare l'aggiornamento a C# 4.0 offcourse).

1

Questa funzionalità è disponibile da C# 4.0 - è stata introdotta in Visual Studio 2010. E può essere utilizzata nel progetto per .NET 3.5. Quindi non c'è bisogno di aggiornare vecchi progetti in .NET 3.5 a .NET 4.0.

Devi usare solo Visual Studio 2010, ma ricordate che si dovrebbe compilare alla versione lingua predefinita (impostata nel progetto Proprietà-> Buid-> Avanzate ...)

This MSDN page ha ulteriori informazioni sui parametri facoltativi in VS 2010.

Problemi correlati