type programming operator implicito convert casteo cast c# casting method-overloading overloading

c# - programming - ¿Por qué es redundante este elenco?



convert type c# (1)

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); }

JObject un elenco a JObject para que el compilador sepa qué sobrecarga debería usar. Pero Visual Studio me dice que el elenco es redundante. Pero, ¿por qué mi llamada no es ambigua sin el elenco?


Pero, ¿por qué mi llamada no es ambigua 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 una string (por ejemplo), entonces 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 ver todos los detalles complejos. En particular, la sección 7.5.3.5 ("mejor objetivo de conversión") es relevante aquí.