Mam metodę z następujących przeciążeń:Dlaczego ta obsada jest niepotrzebna?
string Call(string function, Dictionary<string, object> parameters, object body)
string Call(string function, Dictionary<string, object> parameters, JObject body)
Teraz dodaje inny przeciążenie:
string Call(string function)
{
return Call(function, null, (JObject) null);
}
dodałem obsady do JObject
więc kompilator wie, jakie przeciążenie powinien go używać. Ale Visual Studio mówi mi, że obsada jest zbędna. Ale dlaczego moje wezwanie nie jest dwuznaczne?
Nawet jeśli nie jest niejednoznaczny dla kompilatora, zatrzymam go tam, ponieważ może być niejednoznaczny dla osoby czytającej kod – Alex
@jean Nie, to nie jest powód. Mówię kompilatorowi, którego przeciążenia użyć. I nie ma znaczenia, które przeciążenie metody jest stosowane, ponieważ mogą one mieć zupełnie inne implementacje. 'null' ma wartość' null', ale rzutowanie jest wskazówką, które przeciążenie powinno zostać użyte. – fero
@jean Obawiam się, że znowu jest źle. Obsada jest tylko nadmiarowa, ponieważ kompilator będzie _still_ używał przeciążenia 'JObject', nawet jeśli nie będę rzutował na' JObject', ponieważ używa najbardziej specyficznego przeciążenia, które pasuje do parametrów, a 'null' może pasować do wszystkiego i' JObject' _jest_ bardziej specyficzne niż "obiekt". Zobacz odpowiedź Jona Skeeta, aby uzyskać szczegółowe wyjaśnienie. – fero