Przeglądałem dokumentację i zauważyłem, że Console.WriteLine()
metoda ma kilka przeciążeń. W szczególności moja ciekawość i częściowe zmieszanie dotyczy tych:
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);
Wydaje się zbędne. Jaka jest potrzeba pozostałych czterech przeciążeń oprócz pierwszego? Pierwsza metoda jest w stanie zrobić wszystko, co inne metody. Czy jest jakiś problem z wydajnością, z którym próbowali sobie poradzić, zapewniając dodatkowe przeciążenia, które obsługują do czterech argumentów (ostatni)? Czy narzut związany z przechodzeniem przez tablicę maksymalnie czterech argumentów jest wystarczająco duży, aby zapewnić potrzebę tych przeciążeń?
new E(Console.WriteLine)
w C # 1.Przeciążenia są dla wygody programów C ++ / CLI, w których słowo kluczowe params nie istnieje.
źródło
Myślę, że wszyscy zapominacie, że parametry zostały wprowadzone w C # 2.0. W związku z tym przeciążenia istnieją również z platformy .NET 1.1, gdy nie było słowa kluczowego params.
źródło
Myślę, że zadane pytanie ma już dobre i wyjaśniające odpowiedzi JaredPara i Jaketa, ale jedna kwestia może być również istotna,
Myślę, że łatwość użycia i swoboda dla użytkowników w korzystaniu z którejkolwiek z powyższych funkcji zgodnie z wymaganiami, w tym przypadku potrzeba jest znacznie wygodniejsza niż narzucanie im tworzenia tablicy, kiedy naprawdę tego nie potrzebują.
Myślę też o dawnych czasach, kiedy zacząłem uczyć się C # , prawie nie używałem tablic, a używanie tablic było dla mnie skomplikowanym zadaniem, przypisanie ich, a następnie zainicjowanie ich odpowiednimi wartościami było naprawdę skomplikowane i czasochłonne ...
źródło
params
jest taka, że możesz albo przekazać tablicę, albo jawnie zapisać wszystkie argumenty. metodę taką jakvoid do(params object[])
można wywołać za pomocądo(new object[] {"some", "stuff"}
lubdo("some", "stuff")
. Nie sądzę, aby twój punkt widzenia miał tutaj zastosowanie.params
i wiedzą, czyparams
tam jest, możesz przekazać zmienne oddzielone przecinkami.params
może wyglądać tak przez długi czas iw sekcji pomocy wyświetlanej w Visual Studion, jeśli otrzymamarray []
jako argument, będę myśleć tak samo, aby podać tablicę jako argument ....To nie jest tak naprawdę kwestia wydajności jako takiej. Jednak zwiększenie użyteczności jest uzasadnionym powodem.
Poniższy kod da ci mały wgląd.
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; } } }
Więcej informacji można znaleźć pod adresem: http://msdn.microsoft.com/en-us/library/aa324774(v=vs.71).aspx .
źródło