为什么这个演员多余?

时间:2015-07-31 11:43:52

标签: c# casting overloading

我有一个带有以下重载的方法:

string Call(string function, Dictionary<string, object> parameters, object body)
string Call(string function, Dictionary<string, object> parameters, JObject body)

现在我添加了另一个重载:

string Call(string function)
{
    return Call(function, null, (JObject) null);
}

我向JObject添加了一个强制转换,因此编译器知道它应该使用哪个重载。但Visual Studio告诉我演员阵容是多余的。但是如果没有演员,为什么我的电话不明确?

1 个答案:

答案 0 :(得分:97)

  

但是如果没有演员,为什么我的电话不明确?

因为JObject参数的重载比使用object参数的重载“更好”...因为从nullJObject的转换“更好“而不是从null转换为object

JObjectobject更具体,因为从JObjectobject的隐式转换,但反之亦然。

如果第一种方法的最后一个参数是string而不是(例如),那么任何一次重载都不会比另一种好,并且如果没有强制转换,调用 将是不明确的。< / p>

有关所有复杂细节,请参阅C#5规范的7.5.3节。特别是,第7.5.3.5节(“更好的转换目标”)与此相关。