Я просматривал документацию и заметил, что у этого Console.WriteLine()
метода было несколько перегрузок. В частности, мое любопытство и частичное замешательство относятся к этим:
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);
Это кажется лишним. Зачем нужны четыре других перегрузки поверх первой? Первый метод может делать все, что могут делать другие методы. Есть ли проблема производительности, которую они пытались решить, предоставив дополнительные перегрузки, которые обрабатывают до четырех аргументов (последний из них)? Достаточно ли велики накладные расходы на прохождение массива из четырех аргументов, чтобы обеспечить необходимость в этих перегрузках?
new E(Console.WriteLine)
Перегрузки предназначены для удобства программ C ++ / CLI, в которых ключевое слово params не существует.
источник
Я думаю, все вы, ребята, забываете, что params был введен в C # 2.0. Следовательно, перегрузки также существуют из .NET 1.1, когда ключевого слова params не было.
источник
Я думаю, что на заданный вопрос уже есть хорошие и пояснительные ответы от JaredPar и jaket, но один момент, который, на мой взгляд, тоже может быть актуальным,
Я думаю, что простота использования и свобода для пользователей использовать любую из вышеперечисленных функций в соответствии с их требованиями, там, где это нужно, намного удобнее, чем навязывать их для создания массива, когда они действительно этого не требуют.
Я также думаю о старых временах, когда я начал изучать C #, я почти не использовал массивы, и использование массивов было для меня сложной задачей, назначить его, а затем инициализировать их правильными значениями было действительно сложно и отнимало много времени ...
источник
params
том, что вы можете либо передать массив, либо явно записать все аргументы. такой методvoid do(params object[])
можно вызвать с помощьюdo(new object[] {"some", "stuff"}
илиdo("some", "stuff")
. Я не думаю, что ваша точка зрения здесь применима.params
и они знают, есть лиparams
там, тогда вы можете передавать переменные через запятую.params
долгое время не знал, что использование может быть таким же, и в разделе справки, отображаемом в Visual Studion, если я получу вarray []
качестве аргумента, я подумаю, что то же самое и предоставить массив в качестве аргумента ....На самом деле это не связано с производительностью как таковой. Однако веская причина - повышение удобства использования.
Приведенный ниже код даст вам небольшое представление.
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; } } }
Пожалуйста, обратитесь к ссылке: http://msdn.microsoft.com/en-us/library/aa324774(v=vs.71).aspx для получения дополнительной информации.
источник