2012-12-26 11 views
5

ho avuto uno sguardo al Path.Combine e ho notato che ha quattro overload:diversi overload per il metodo con "params" parola chiave

  1. string, string
  2. string, string, string
  3. string, string , string, string
  4. params string[]

Come sono utili i primi tre sovraccarichi?
Per come la vedo io, il quarto sovraccarico rende gli altri piuttosto inutili. Ho guardato la fonte e ho visto che l'implementazione del quarto sovraccarico è un po 'diversa, ma anche in questo caso mi aspetterei di avere solo il sovraccarico params che decide quale implementazione utilizzare in base alla lunghezza dell'array.

+0

Bene, 'Combine (String, String)' esiste per compatibilità con le versioni precedenti (le versioni precedenti alle 4 non avevano altri sovraccarichi). – Oded

+0

Da quello che ho capito, gli overloads non params ti permettono di saltare l'overhead della creazione dell'array di parametri e dell'iteratore dell'argomento. Non ricordo dove l'ho letto, quindi sto commentando piuttosto che rispondere. – phoog

+0

@phoog: questo ha senso. La maggior parte degli usi dovrà combinare fino a 4 sezioni di percorso. – Oded

risposta

5

In base a questa risposta, https://stackoverflow.com/a/2796763/385844, è necessario evitare l'overhead della creazione dell'array di parametri e poiché gli overload di non params sono utili per gli utenti di lingue che non supportano gli elenchi di parametri di lunghezza variabile.

Vedi anche

1

Proprio come Oded ha detto, ho scoperto che deve essere stato lì per la compatibilità a ritroso come non ho potuto trovato in 2.0, 3,5

I pensa che il sovraccarico iniziò in 4.0

  • Path.Combine 4.0 - Se si guarda alla navigazione a destra, vedrete i sovraccarichi

Per quanto riguarda gli altri molti sovraccarichi, non parlerei per la squadra .net, ma sento che sentono è inutile aumentare i sovraccarichi ogni tempo in modo che si fermò a 4 e ha fornito un array di stringhe per più di 4 combinazioni di stringhe - che credo sia saggio

ho basato la mia spiegazione sull'espressione Lambda dove la squadra si fermò a 16 argomenti

Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

Path.Combine avrebbe potuto essere così, ma è inutile.

+1

Sì, ma non spiega i 3 e 4 sovraccarichi di stringa (in particolare poiché il sovraccarico dell'array params è stato aggiunto contemporaneamente). – Oded

+0

@Oded Visualizza il mio aggiornamento. Spero di essere sulla buona strada? – codingbiz

+2

La cosa 'Action' è diversa, al momento non c'è modo per una definizione generica' params'. – SWeko

0

Posso solo parlare della mia esperienza con altri sviluppatori C#.

Non tutti gli sviluppatori hanno familiarità o agio con la params la sintassi (e il fatto che il nome tecnico è parametri di funzione variadic non aiuta).
So che ho dovuto spiegare più e più volte, quindi non è raro vedere le chiamate

instance.ParamsMethod(new int[]{1}); 
//or even 
instance.ParamsMethod(new List<int>{1}.ToArray()); 

per un metodo Scritto da:

ParamsMethod (params int [] fonte public void) {}

annullando tutto lo zucchero sintattico dolce di params (e quindi alcuni).

Quindi, la mia preferenza personale è quella di fornire il caso dei parametri 1 e 2 come sovraccarico, perché ciò rende alquanto più difficile ingombrare il codice inutilmente. La chiamata è leggermente più lenta a causa del sovraccarico concatenato, ma aiuta a rendere più chiaro il codice.