Pregunta

¿Los parámetros predeterminados para los métodos violan la encapsulación?

¿Cuál fue la razón detrás de no proporcionar parámetros predeterminados en C #?

¿Fue útil?

Solución

Tomaría esto como el " oficial " respuesta de Microsoft. Sin embargo, los parámetros predeterminados (y con nombre) definitivamente estarán disponibles en C # 4.0.

Otros consejos

No, no afecta la encapsulación de ninguna manera. Simplemente no es a menudo necesario. A menudo, crear una sobrecarga que requiere menos argumentos es una solución más flexible y limpia, por lo que el diseñador de C # simplemente no vio una razón para agregar la complejidad de los parámetros predeterminados al lenguaje.

Agregar " Otra forma de hacer lo mismo " Siempre es una compensación. En algunos casos puede ser conveniente. Pero cuanto más sintaxis legalice, más complejo se volverá el idioma de aprendizaje y más podrá aferrarse, evitando futuras extensiones. (Quizás algún día se les ocurra otra extensión del lenguaje, que usa una sintaxis similar. Entonces sería imposible agregarlo, ya que entraría en conflicto con la función que agregaron anteriormente)

Como se ha señalado, los parámetros predeterminados no eran una característica priorizada, pero es probable que se agreguen en C # 4.0. Sin embargo, creo que hubo excelentes razones para no incluirlo antes (en 4.0, como lo he entendido, es principalmente para apoyar a duck typing estilos de programación donde los parámetros predeterminados aumentan la compatibilidad de tipos).

Creo que las listas de parámetros excesivos (sin duda más de 4-5 parámetros distintos) son un olor de código . Los parámetros predeterminados no son malos en sí mismos, pero pueden provocar un diseño deficiente, lo que retrasa la refactorización en más objetos.

A su primera pregunta: no, es exactamente lo mismo que proporcionar múltiples constructores sobrecargados. En cuanto al segundo, no podría decirlo.

Los parámetros predeterminados se incluirán en C # 4.0

Algún material de lectura al respecto:

haga clic

haga clic en

También parece que el autor de esta publicación publicará un artículo en un futuro próximo sobre el 'por qué' MS elige implementar parámetros predeterminados en C #

Aquí hay una respuesta por qué no se proporciona en C # http://blogs.msdn.com/csharpfaq/archive/ 2004/03/07 / 85556.aspx

Un inconveniente de la implementación del parámetro predeterminado en C # 4.0 es que crea una dependencia en el nombre de los parámetros. Esto ya existía en VB, lo que podría ser una de las razones por las que decidieron implementarlo en 4.0.

Otro inconveniente es que el valor predeterminado depende de cómo lances tu objeto. Puede leer sobre esto aquí: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top