C#params关键字和函数重载

时间:2011-08-11 02:05:12

标签: c# parameters overloading

在.net框架中,我经常看到如下所示的重载函数,

  1. public void Log(string message) ...
  2. public void Log(string message, params object[] args) ...
  3. 我的问题是,因为params关键字允许零个或多个参数,我们可以摆脱第一个签名吗?只有第二个签名,我可以用下面没有参数的方式调用它,所以我不知道他们为什么会有第一个签名?

    Log("calling with no param");
    

3 个答案:

答案 0 :(得分:6)

另一个原因是params很慢,认为收集了所有参数并构建了一个数组。所以第二个更慢。

public static string Format(string format, object arg0);
public static string Format(string format, params object[] args);

答案 1 :(得分:2)

如果无数组版本的实现更简单,通常会使用此模式。

答案 2 :(得分:2)

速度优势也很小。

每次调用一个非常简单的(count++)方法进行10亿次迭代所花费的毫秒数:

  • 2472 ms w / o params
  • 7773 ms w / params