Tengo un método con las siguientes sobrecargas:
string Call(string function, Dictionary<string, object> parameters, object body) string Call(string function, Dictionary<string, object> parameters, JObject body)Ahora agregué otra sobrecarga:
string Call(string function) { return Call(function, null, (JObject) null); } Agregué una conversión a JObject para que el compilador sepa qué sobrecarga debe usar. Pero Visual Studio me dice que el elenco es redundante. Pero, ¿por qué mi llamado no es ambiguo sin el elenco?
Pero, ¿por qué mi llamado no es ambiguo sin el elenco?
Porque la sobrecarga con el parámetro JObject es "mejor" que la sobrecarga con el parámetro object ... porque la conversión de null a JObject es "mejor" que la conversión de null a object .
JObject es más específico que object , porque hay una conversión implícita de JObject a object , pero no al revés.
Si el parámetro final para el primer método fuera string (por ejemplo), ninguna sobrecarga sería mejor que la otra y la llamada sería ambigua sin la conversión.
Consulte la sección 7.5.3 de la especificación C# 5 para conocer todos los detalles complejos. En particular, la sección 7.5.3.5 ("mejor objetivo de conversión") es relevante aquí.