I sovraccarichi vengono risolti scegliendo il sovraccarico più specifico. In questo caso, method1<string>(string)
è più specifico di method1(object)
, quindi è il sovraccarico scelto.
Ci sono dettagli in section 7.4.2 of the C# specification.
Se si desidera selezionare un sovraccarico specifico, è possibile farlo mediante la trasmissione esplicita dei parametri ai tipi desiderati. Di seguito chiamerà il method1(object)
di sovraccarico al posto del generico uno:
method1((object)"xyz");
Ci sono casi in cui il compilatore non sapere che sovraccaricano per selezionare, ad esempio:
void method2(string x, object y);
void method2(object x, string y);
method2("xyz", "abc");
In questo caso il compilatore non sa quale sovraccarico scegliere, perché né il sovraccarico è chiaramente migliore dell'altro (non sa quale stringa implicitamente abbattuta verso l'oggetto). Quindi emetterà un errore del compilatore.
Simile a [questa domanda] (http://stackoverflow.com/questions/9017363/ambiguous-method-overloading) – adelphus