Ключевое слово C # params и перегрузка функций - PullRequest
5 голосов
/ 11 августа 2011

В платформе .net я постоянно вижу перегруженные функции, подобные следующим,

  1. public void Log(string message) ...
  2. public void Log(string message, params object[] args) ...

У меня такой вопрос, поскольку ключевое слово params допускает ноль или более параметров, можем ли мы просто избавиться от первой подписи? С помощью только второй подписи я мог бы назвать ее без параметров, как показано ниже, поэтому я не знаю, почему у них будет первая подпись?

Log("calling with no param");

Ответы [ 3 ]

6 голосов
/ 11 августа 2011

Другая причина в том, что params медленный, думая, что все параметры собраны и массив построен.Так что второй медленнее.

public static string Format(string format, object arg0);
public static string Format(string format, params object[] args);
2 голосов
/ 11 августа 2011

Также есть небольшое преимущество в скорости.

Миллисекунды, потраченные на 1 миллиард итераций вызова очень простого (count++) метода с каждым:

  • 2472 мс w/ o params
  • 7773 мс / params
2 голосов
/ 11 августа 2011

Этот шаблон обычно используется, если версия без массива имеет более простую реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...