Sto leggendo Effective C # di Bill Wagner. Nell'elemento 14 - Riduci al minimo la logica di inizializzazione duplicata , mostra il seguente esempio di utilizzo della nuova funzionalità di parametri opzionali in un costruttore:
public MyClass(int initialCount = 0, string name = "")
Si noti che ha usato ""
invece di string.Empty
.
Lui commenta:
Noterai [in un esempio sopra] che il secondo costruttore ha specificato "" per il valore predefinito sul parametro name , invece del più consueto
string.Empty
. Questo perchéstring.Empty
non è una costante del tempo di compilazione. È una proprietà statica definita nella classe string. Poiché non è una costante di compilazione, non è possibile utilizzarla come valore predefinito per un parametro.
Se non possiamo usare la string.Empty
statica in tutte le situazioni, allora non ne sconfigge lo scopo? Ho pensato che lo avremmo usato per essere sicuri di avere un mezzo indipendente dal sistema per fare riferimento alla stringa vuota. La mia comprensione è sbagliata? Grazie.
AGGIORNAMENTO
Solo un commento di follow-up. Secondo MSDN:
Ogni parametro facoltativo ha un valore predefinito come parte della sua definizione. Se non viene inviato alcun argomento per quel parametro, viene utilizzato il valore predefinito. I valori predefiniti devono essere costanti.
Quindi non saremo in grado di utilizzare System.Environment.NewLine
nessuno dei due o utilizzare oggetti appena istanziati come valori predefiniti. Non ho ancora usato VS2010 e questo è deludente!