fer*_*ero 71 c# casting overloading
我有一个方法具有以下重载:
string Call(string function, Dictionary<string, object> parameters, object body)
string Call(string function, Dictionary<string, object> parameters, JObject body)
Run Code Online (Sandbox Code Playgroud)
现在我添加了另一个重载:
string Call(string function)
{
return Call(function, null, (JObject) null);
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个强制转换,JObject因此编译器知道它应该使用哪个重载.但Visual Studio告诉我演员阵容是多余的.但是如果没有演员,为什么我的电话不明确?
Jon*_*eet 97
但是如果没有演员,为什么我的电话不明确?
因为与过载JObject参数比与过载"更好"的object参数......因为从转换null到JObject比从转换"更好" null来object.
JObject比更具体的object,因为有一个从隐式转换JObject到object,而不是相反.
如果第一个方法的最后一个参数是string(例如),那么过载都不会比另一个好,并且如果没有强制转换,调用将是不明确的.
有关所有复杂细节,请参阅C#5规范的第7.5.3节.特别是,第7.5.3.5节("更好的转换目标")在这里是相关的.
| 归档时间: |
|
| 查看次数: |
7604 次 |
| 最近记录: |