2009-03-08 16 views
9

¿Los parámetros predeterminados para los métodos violan la encapsulación?¿Los parámetros predeterminados son una mala práctica en OOP?

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

+0

Estoy leyendo su pregunta como "¿Son crípticas cosas mágicas que vienen de la nada para mi código?". Simplemente no puedo aceptar que un lenguaje fino como C# permita este parámetro opcional BASURA. – Sharky

Respuesta

10

Tomaría this como la respuesta "oficial" de Microsoft. Sin embargo, los parámetros predeterminados (y nombrados) serán definitivamente disponibles en C# 4.0.

1

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

3

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 más 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" es siempre una compensación. En algunos casos, puede ser conveniente. Pero cuanta más sintaxis crees legal, más complejo se vuelve el idioma para aprender, y cuanto más te puedes encasillar, previniendo la extensión futura. (Tal vez algún día encontrarían otra extensión del lenguaje, que usa una sintaxis similar. Entonces sería imposible agregarla, porque entraría en conflicto con la característica que agregaron anteriormente)

1

Los parámetros por defecto se incluirán en C# 4.0

algún material de lectura al respecto:

click

click

También parece que el autor de this post publicará un artículo en el futuro cercano en el 'por qué' MS elige implementar params predeterminados en C#

1

Uno de los inconvenientes con la implementación de parámetros por defecto en C# 4.0 es que crea una dependencia en el nombre de parámetros. Esto ya existía en VB, que podría ser una de las razones por las que eligieron implementarlo en 4.0.

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

2

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 soportar los estilos de programación duck typing donde los parámetros predeterminados aumentan la compatibilidad de tipo).

Creo que las listas de parámetros excesivas (sin duda más de 4-5 parámetros distintos) es un code smell. Los parámetros predeterminados no son malos en sí mismos, pero arriesgan alentar el diseño deficiente, retrasando la refactorización en más objetos.

Cuestiones relacionadas