2014-11-24 18 views
5

Ogni tanto (ad esempio di NUnit TestCaseData), vedo un oggetto che ha una o più costruttori come segue:Perché entrambi i param e i costruttori di oggetti muti?

MyObject(object arg) 
MyObject(object arg1, object arg2) 
MyObject(object arg1, object arg2, object arg3) 
//guess they got tired of writing constructors? 
MyObject(params object[] args) 

Se un oggetto ha la funzione di costruzione params, però, che cosa è il vantaggio di definire i precedenti ?

+1

Solo i vantaggi con i precedenti sono i valori predefiniti per questi parametri nient'altro. –

+0

Ho visto lo stesso con 'string.Format', la mia pura ipotesi è una sorta di ottimizzazioni (per evitare l'uso di' parametri 'pesanti per pochi parametri). – Sinatr

+0

Amol: non è l'unica ragione, ma vale comunque un +1. – Arithmomaniac

risposta

6

In genere è per le prestazioni.

Nel tuo esempio è probabilmente il caso che MyObject sia allocato con 1, 2 o 3 parametri, e quindi lo sviluppatore ha ottimizzato per questo. In primo luogo, l'implementazione sottostante potrebbe essere ottimizzata, e anche nel sito di chiamata i parametri possono essere passati senza alcuna allocazione di memoria aggiuntiva. Usando un params il compilatore dovrà inserire il codice per creare un array e quindi assegnare i parametri a quell'array prima di chiamarlo. Se è normale chiamare con i parametri 1, 2 o 3, è possibile evitare questa allocazione.

Problemi correlati