program story

이 캐스트가 중복되는 이유는 무엇입니까?

inputbox 2020. 10. 30. 08:01
반응형

이 캐스트가 중복되는 이유는 무엇입니까?


다음과 같은 오버로드가있는 메서드가 있습니다.

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는 캐스트가 중복되었다고 말합니다. 그런데 왜 캐스트 없이는 내 전화가 모호하지 않습니까?


그런데 왜 캐스트 없이는 내 전화가 모호하지 않습니까?

에 과부하 때문에 JObject매개 변수는 "더 나은"를 가진 과부하보다 object에서 변환하기 때문에 ... 매개 변수 null에 대한이 JObject의 전환보다는 "더 나은"입니다 nullobject.

JObject보다 더 구체적이다 object에서 암시 적 변환이 때문에, JObject에가 object있지만 그 반대의 경우도 마찬가지.

string예를 들어 첫 번째 메서드의 마지막 매개 변수가 대신 있으면 오버로드가 다른 것보다 나을 수 없으며 캐스트없이 호출 모호합니다.

모든 복잡한 세부 사항은 C # 5 사양의 섹션 7.5.3을 참조하세요. 특히 섹션 7.5.3.5 ( "더 나은 전환 목표")가 여기에 관련됩니다.

참고 URL : https://stackoverflow.com/questions/31745365/why-is-this-cast-redundant

반응형