Estou lendo Effective C # de Bill Wagner. No Item 14 - Minimize Duplicate Initialization Logic , ele mostra o seguinte exemplo de uso do novo recurso de parâmetros opcionais em um construtor:
public MyClass(int initialCount = 0, string name = "")
Observe que ele usou em ""
vez de string.Empty
.
Ele comenta:
Você notará [em um exemplo acima] que o segundo construtor especificou "" como o valor padrão no parâmetro de nome , em vez do mais usual
string.Empty
. Isso porquestring.Empty
não é uma constante de tempo de compilação. É uma propriedade estática definida na classe string. Como não é uma constante de compilação, você não pode usá-la como o valor padrão de um parâmetro.
Se não podemos usar a string.Empty
estática em todas as situações, isso não anula o propósito dela? Pensei em usá-lo para ter certeza de que temos um meio independente do sistema de se referir à string vazia. Meu entendimento está errado? Obrigado.
ATUALIZAÇÃO
Apenas um comentário de acompanhamento. De acordo com o MSDN:
Cada parâmetro opcional possui um valor padrão como parte de sua definição. Se nenhum argumento for enviado para esse parâmetro, o valor padrão será usado. Os valores padrão devem ser constantes.
Então não podemos usar System.Environment.NewLine
nenhum dos dois, ou usar objetos recém-instanciados como valores padrão. Eu não usei o VS2010 ainda, e isso é decepcionante!