Ray
Ray

Reputation: 12441

C# params keyword and function overloading

In .net framework I constantly see overloaded functions like the following,

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

my question is since the params keyword allows zero or more parameters, could we just get rid of the first signature? With just the second signature, I could call it with no parameters fine like below, so I don't know why they would have the first signature?

Log("calling with no param");

Upvotes: 5

Views: 1309

Answers (3)

porges
porges

Reputation: 30580

There is a small speed advantage as well.

Milliseconds taken for 1 billion iterations of calling a very simple (count++) method with each:

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

Upvotes: 2

Cheng Chen
Cheng Chen

Reputation: 43523

Another reason is params is slow, thinking that all parameters are collected and an array is built. So the second one is slower.

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

Upvotes: 6

SLaks
SLaks

Reputation: 887479

This pattern is typically used if the array-less version has a simpler implementation.

Upvotes: 2

Related Questions