20 votos

Es esta una mala práctica en la sobrecarga de un método?

Yo tenía un método como este en el que sus consumidores están llamando a:

static public void DisplayOrderComments(param1, param2, param3, param4)

Ahora he añadido una sobrecarga para de esta manera:

static public void DisplayOrderComments(param1, param2, param3, param4, param5)
{
    DisplayOrderComments(param1, param2, param3, param4);
    param5.Foo();
}

Es una mala práctica? Hay mejores maneras de hacerlo?

28voto

Oded Puntos 271275

Esto es absolutamente bien - se mantiene el código SECO y evita la duplicación innecesaria.

No sólo no es una mala práctica, es una buena práctica.


Si usted está usando C# 4.0 y superiores (VS 2010+), se puede usar un argumento opcional para su param5 en lugar de la sobrecarga, como Mikey Mouse menciona en esta respuesta.

20voto

Aliostad Puntos 47792

Buena pregunta.

Yo diría que no, es normal que la sobrecarga. pero voy a cambiar como tal (siempre implementar en el que con la mayoría de los parámetros):

static public void DisplayOrderComments(param1, param2, param3, param4)
{
   DisplayOrderComments(param1, param2, param3, param4, null);
}

static public void DisplayOrderComments(param1, param2, param3, param4, param5)
{
  ... // do the work
  if(param5!=null)
     param5.Foo();
}

7voto

Mikey Mouse Puntos 1284

Sí, yo woudln no digo que es malo pero si estás usando C# 4.0 yo recomendaría hacer el último parámetro opcional.

Usted puede leer todo acerca de em aquí http://msdn.microsoft.com/en-us/library/dd264739.aspx

4voto

George Mauer Puntos 22685

No en todos. Esto es perfectamente aceptable, pero hay dos problemas.

  1. param5 podría ser aprobada en como Null - podría escribir algo de código para comprobar que la condición y hacer el apropiado.
  2. Esto evitará el uso de parámetros opcionales más tarde. Pero no importa.

Por el camino codereview.stackexchange.com podría ser un mejor lugar para este tipo de preguntas.

2voto

Alexei Levenkov Puntos 49945

Este es también commons práctica para facilitar el uso de la API a una interfaz. Mantiene la interfaz de pequeño con el método con varios parámetros, pero los usos múltiples de las extensiones de los métodos (a veces con el mismo nombre) que facilitan el uso de la API sin contaminar interfaz:

interface ILog
{
   void Log(string message, int someNumber, float anotherParam, object moreParams);
}

public static class LogExtensions
{
   public void Log(ILog this log, message)
   {
      log.Log(message, 42, 0, null); 
   }
// more methods using ILog.Log like LogFormat that takes format string...
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X