2010-05-02 16 views

risposta

13

Invece di questo:

void Method(string param1, string param2) { } 
void Method(string param1, string param2, string param3) { } 
void Method(string param1, string param2, string param3, string param4) { } 
void Method(string param1, string param2, string param3, int int4) { } 
//etc... 

Si può solo avere un metodo con tutti i params che si desidera, e chiamarlo utilizzando i params denominati in questo modo:

void Method(string param1, string param2 = "default2", 
      string param3 = "default3", int int4 = 12, int lastParam = 12) { } 

E chiamalo così:

Method(param1: "myString", int4: 23); 
//or... 
Method(param1: "myString", param4: "string2", int4: 23); 

Basta includere ciò che si desidera impostare, il resto sarà i valori predefiniti specificati nella firma del metodo.

+1

penso che la sintassi non ha parentesi graffe. –

+1

@Martinho - Woops ha risposto contemporaneamente a una domanda con oggetto javascript :) risolto –

+0

E se il metodo utilizza tutti i parametri e cerco di passare solo in alcuni di essi? – dotnetdev

6

Si supponga di avere un dipendente di classe come indicato di seguito che ha 3 costruttori.

Con C# 4.0, sarà necessario creare un singolo costruttore come segue che sostituirà tutti i 3 costruttori.

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Qualification { get; set; } 
    public string MiddleName { get; set; } 

    public Employee(string firstName, string lastName, 
      string qualification = "N/A", string middleName = "") 
    { 
     FirstName= firstName; 
     LastName= lastName; 
     Qualification= qualification; 
     MiddleName = middleName; 
    } 
} 

Questo costruttore può essere chiamato in seguito modi ..

Employee emp = new Employee("Adil", "Mughal"); 
Employee emp = new Employee("Adil", "Mughal", middleName: "Ahmed"); 
Employee emp = new Employee("Adil", qualification:"BS"); 
Employee emp = new Employee("ABC", lastName: "EFG", qualification: "BS"); 
Employee emp = new Employee("XYZ", middleName: "MNO"); 
+1

È meglio mostrarlo con metodi piuttosto che con costruttori, dato che puoi già fare qualcosa di simile con l'inizializzazione della proprietà in C# 3. –

+0

Per la tua prima versione avrei avuto costruttori con meno argomenti chiamare il costruttore con più strumenti passando il default valori. Un punto inutile, dal momento che la seconda opzione è più bella, ma solo per scegliere nit in una domenica :) –

+0

In C# 3 Potrei aver considerato di riscrivere il metodo per accettare un oggetto collezione di parametri. Come le osservazioni di Nick, è possibile inizializzare quell'oggetto comodamente usando gli inizializzatori di proprietà. Ma per C# 4.0 usare solo argomenti opzionali direttamente nel metodo sembra molto più sensato. – Joren