Przeciążenia są rozwiązywane przez wybór najbardziej konkretnego przeciążenia. W tym przypadku method1<string>(string)
jest bardziej specyficzny niż method1(object)
, więc jest to wybrane przeciążenie.
Istnieją szczegóły w section 7.4.2 of the C# specification.
Jeśli chcesz wybrać określone przeciążenie, możesz to zrobić, jawnie przesyłając parametry do żądanych typów. Poniższa wywoła method1(object)
przeciążenia zamiast generycznego One:
method1((object)"xyz");
Istnieją przypadki, gdzie kompilator nie będzie wiedział, który przeciążeniem, aby wybrać, na przykład:
void method2(string x, object y);
void method2(object x, string y);
method2("xyz", "abc");
W tym przypadku kompilator nie wie, które przeciążenie wybrać, ponieważ żadne przeciążenie nie jest wyraźnie lepsze od drugiego (nie wie, który ciąg znaków jest niejawnie sprowadzony do obiektu). Tak więc wyemituje błąd kompilatora.
Podobny do [to pytanie] (http://stackoverflow.com/questions/9017363/ambiguous-method-overloading) – adelphus