2013-02-12 9 views
10

Esiste un qualche tipo di convenzione in C# (o qualsiasi linguaggio orientato agli oggetti che supporti l'overloading dei metodi) per la seguente situazione?Esiste una convenzione per l'ordine dei parametri di sovraccarico del metodo C#?

Diciamo che ho un metodo foo:

public void Foo(int a){//does stuff} 

Ma in realtà ho 3 metodi pippo:

public void Foo(int a){} 
public void Foo(int a, double b){} 
public void Foo(float c, int a, double b){} 

v'è una convenzione che indica se l'ordine dei parametri questioni in un metodo sovraccarico? Si noti come il terzo metodo non presenta un'evidente progressione logica (a, b, c).

+1

Se 'a' è sempre richiesto, e' b' è richiesto se 'c' viene fornito, farei qualcosa di simile a questo:' public void Foo (int a, double? B = null, float? C = null) '- assumendo che la tua logica sia la stessa. – zimdanen

+0

@zimdanen, non vi è alcun motivo per rendere i valori validi n. – Maxwe11

+5

@Jupiter: l'idea è di utilizzarla come alternativa ai sovraccarichi. Funziona bene quando ci sono più parametri che sono tutti indipendenti: si evita di raddoppiare il numero di sovraccarichi ogni volta che ne aggiungi un altro. (Certo, una volta arrivati ​​a circa 5 parametri dovresti cercare con attenzione se questo sia un design appropriato comunque ...) –

risposta

17

Sì, c'è. Date un'occhiata a https://msdn.microsoft.com/en-us/library/ms229029(v=vs.110).aspx

Essere coerenti nell'ordinamento dei parametri in membri sovraccaricati. I parametri con lo stesso nome dovrebbero apparire nella stessa posizione in tutti i sovraccarichi.

+3

E inoltre, dovresti solo sovraccaricare i metodi allo scopo di fornire valori predefiniti ad un metodo comune. In caso contrario, i metodi non sono strettamente correlati per avere lo stesso nome e dovrebbero avere nomi diversi. –

1

Mentre non è necessario mantenere un ordine specifico, è generalmente una buona idea farlo, per motivi di leggibilità. Tuttavia, l'ordine dei parametri è importante per la firma del metodo. Ad esempio,

public void DoStuff(int a, bool b, string c) 
{ 

} 

public void DoStuff(bool b, string c, int a) 
{ 

} 

è valido e viene compilato correttamente, anche se il numero di parametri e anche i loro nomi sono gli stessi.

Aggiornamento: non consiglierei di farlo in questo modo. Potrebbe portare a confusione. Stavo solo affermando che è tecnicamente valido.

+0

Mentre questo è valido, sarebbe totalmente confuso per coloro che utilizzano il metodo. –

+0

Esattamente, questo è il motivo per cui ho detto che è una buona idea mantenere l'ordine per la leggibilità. Personalmente non lo farei in questo modo. Stavo solo affermando per la cronaca che l'ordine dei parametri fa riferimento alla firma del metodo. Se così non fosse, il compilatore avrebbe un tempo più difficile distinguendo tra i sovraccarichi. – sparky68967

Problemi correlati