c# - Is there any priority when resolving method overloads? -
why execute testmethod<t>(params t[] input) method instead of execute testmethod(object input).i confusing why complier execute generic method.is there priority hierarchy on .net framework ?
class testclass { static void main() { testmethod("hello world"); } static void testmethod(object input) { console.writeline("object"); } static void testmethod<t>(params t[] input) { console.writeline("params t[]"); } }
the comment on question contains link overload resolution specs of c# contains infos need answer question in depth. it's not easy read, though , hard find actual path of resolution in case, here happens, far can tell:
parameter arrays:
first, need @ params keyword does: shortcut developers convenience, here identical to:
static void testmethod<t>(params t[] input) gets translated to
static void testmethod<t>(t[] item) and calls translated accordingly:
testmethod("string2", "string2"); gets translated to:
testmethod(new string[] { "string1", "string2" ); resolution:
with in mind, let's see compiler does: compiler evaluates options resolve call @ runtime.
your call is:
testmethod("string"); the first option translate call to:
testmethod(new string[] { "string" }); this allow call generic version, while using string t, result in 'resolved method signature':
testmethod(string[] item) so, required conversion actual required argument type is
string[] string[] option b interpret parameter "string" in our eyes, string. feasible call non-generic version.
string object the conversions evaluated according section 7.4.3.4 of c# spec , avoid downgrading of string object, first option chosen.
Comments
Post a Comment