Estoy leyendo Effective C # de Bill Wagner. En el artículo 14 - Minimizar la lógica de inicialización duplicada , muestra el siguiente ejemplo del uso de la nueva función de parámetros opcionales en un constructor:
public MyClass(int initialCount = 0, string name = "")
Observe que usó en ""
lugar de string.Empty
.
Él comenta:
Observará [en un ejemplo anterior] que el segundo constructor especificó "" para el valor predeterminado en el parámetro de nombre , en lugar del más habitual
string.Empty
. Eso es porquestring.Empty
no es una constante en tiempo de compilación. Es una propiedad estática definida en la clase de cadena. Debido a que no es una constante de compilación, no puede usarlo como valor predeterminado para un parámetro.
Si no podemos usar el string.Empty
estática en todas las situaciones, ¿no anula eso su propósito? Pensé que lo usaríamos para estar seguros de que tenemos un medio independiente del sistema para referirnos a la cadena vacía. ¿Está mal mi comprensión? Gracias.
ACTUALIZAR
Solo un comentario de seguimiento. Según MSDN:
Cada parámetro opcional tiene un valor predeterminado como parte de su definición. Si no se envía ningún argumento para ese parámetro, se utiliza el valor predeterminado. Los valores predeterminados deben ser constantes.
Entonces no podremos usar System.Environment.NewLine
ninguno de los dos o usar objetos recién instanciados como valores predeterminados. Todavía no he usado VS2010, ¡y esto es decepcionante!