Estaba revisando la documentación y noté que el Console.WriteLine()
método tenía varias sobrecargas. Particularmente, mi curiosidad y confusión parcial se refiere a estos:
public static void WriteLine(string format, params object[] arg);
public static void WriteLine(string format, object arg0);
public static void WriteLine(string format, object arg0, object arg1);
public static void WriteLine(string format, object arg0, object arg1, object arg2);
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3);
Parece redundante. ¿Cuál es la necesidad de las otras cuatro sobrecargas además de la primera? El primer método puede hacer todo lo que pueden hacer los otros métodos. ¿Existe un problema de rendimiento que estaban tratando de abordar proporcionando sobrecargas adicionales, que manejan hasta cuatro argumentos (el último)? ¿La sobrecarga de pasar por una matriz de hasta cuatro argumentos es lo suficientemente grande como para satisfacer la necesidad de estas sobrecargas?
new E(Console.WriteLine)
en C # 1.Las sobrecargas son para la conveniencia de los programas C ++ / CLI donde la palabra clave params no existe.
fuente
Creo que todos ustedes están olvidando que params se introdujo en C # 2.0. Por lo tanto, las sobrecargas también existen desde .NET 1.1, cuando la palabra clave params no.
fuente
Creo que la pregunta que se tiene ya el bien y respuestas explicativas por JaredPar y jaket pero un punto lo que creo que puede ser relevante también,
Creo que la facilidad de uso y la libertad para que los usuarios usen cualquiera de las funciones anteriores de acuerdo con sus requisitos, de ahí que la necesidad sea mucho más conveniente en lugar de imponerlos para crear una matriz, cuando realmente no lo requieren.
También pienso en los viejos tiempos cuando comencé a aprender el C # Casi no usaba matrices y usar matrices era una tarea complicada para mí, asignarlas y luego inicializarlas con los valores adecuados fue realmente complicado y también consumió mucho tiempo ...
fuente
params
es que pueda pasar una matriz o escribir explícitamente todos los argumentos. un método comovoid do(params object[])
se puede llamar condo(new object[] {"some", "stuff"}
odo("some", "stuff")
. No creo que su punto sea exactamente aplicable aquí.params
y saben siparams
está ahí, entonces puedes pasar las variables separadas por comas?params
podría ser así durante mucho tiempo y en la sección de ayuda que se muestra en Visual Studion, si obtengo unarray []
argumento, pensaré lo mismo para proporcionar una matriz como argumento ...Esto no es realmente por la cuestión del rendimiento como tal. Sin embargo, aumentar la usabilidad es una razón válida detrás de esto.
El código a continuación le dará una pequeña idea.
public class TipCalculator { private const double tipRate = 0.18; public static int Main(string[] args) { double billTotal; if (args.Length == 0) { Console.WriteLine("usage: TIPCALC total"); return 1; } else { try { billTotal = Double.Parse(args[0]); } catch(FormatException) { Console.WriteLine("usage: TIPCALC total"); return 1; } double tip = billTotal * tipRate; Console.WriteLine(); Console.WriteLine("Bill total:\t{0,8:c}", billTotal); Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate); Console.WriteLine(("").PadRight(24, '-')); Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip); return 0; } } }
Por favor, consulte el enlace: http://msdn.microsoft.com/en-us/library/aa324774(v=vs.71).aspx para obtener más información.
fuente