Let's say I create these two methods:
public void AddScriptToPage(params string[] scripts) { /*...*/ }
public void AddScriptToPage(string href, string elementId) { /*...*/ }
Which one of these methods gets call by the code below, and why?
AddScriptToPage("dork.js", "foobar.js");
How does the compiler determine which method to call?
Your second method gets called, if an exact match is found, it's used before params.
From MSDN:
When performing overload resolution, a method with a parameter array may be applicable either in its normal form or in its expanded form (Section 7.4.2.1). The expanded form of a method is available only if the normal form of the method is not applicable and only if a method with the same signature as the expanded form is not already declared in the same type.
Their example:
using System;
class Test
{
static void F(params object[] a) {
Console.WriteLine("F(object[])");
}
static void F() {
Console.WriteLine("F()");
}
static void F(object a0, object a1) {
Console.WriteLine("F(object,object)");
}
static void Main() {
F();
F(1);
F(1, 2);
F(1, 2, 3);
F(1, 2, 3, 4);
}
}
Output:
F();
F(object[]);
F(object,object);
F(object[]);
F(object[]);
public void AddScriptToPage(string href, string elementId)
.. will get called. The compiler chooses the signature with the most accurate match, with params having least priority.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With