Perché i metodi che richiedono una quantità illimitata di parametri spesso definiscono sovraccarichi con un numero inferiore di parametri?

36

Ad esempio, il metodo System.IO.Path.Combine in .NET presenta i seguenti overload:

Combine(params String[])
Combine(String, String)
Combine(String, String, String)
Combine(String, String, String, String)

Qual è il punto degli ultimi tre?

Il primo li coprirebbe tutti, come se guardassi da vicino, utilizza la parola chiave params . L'argomento della retrocompatibilità riguarderebbe solo la variante Combine(String, String) , poiché era l'unica versione fino a .NET 4.

    
posta Alex 04.05.2015 - 17:46
fonte

2 risposte

56

Il motivo principale è per le prestazioni. Lo zucchero sintattico "argomenti illimitati" è in realtà una serie di stringhe. Se passi solo una stringa, perché creare un array con una sola stringa? Soprattutto se ~ 90% delle invocazioni di questo metodo sarà con 3 o meno argomenti, non è necessario per l'oggetto più pesante. È un po 'più leggero nella memoria e richiede un po' meno tempo di elaborazione perché non è necessario un ciclo per definire il metodo. Se hai tre stringhe, codifichi solo per tre stringhe.

    
risposta data 04.05.2015 - 18:05
fonte
4

Zucchero sintattico.

Quando si manipolano i percorsi dei file, è estremamente comune avere un piccolo numero di valori fissi. In questi casi, è più conveniente utilizzarli direttamente piuttosto che doverli raggruppare in un array.

    
risposta data 04.05.2015 - 17:55
fonte

Leggi altre domande sui tag