Он применяет правила "лучшего преобразования" (7.4.3.3 спецификации C # 3) как часть разрешения перегрузки (раздел 7.4.3 в целом).
В основном в этом случае есть преобразование из *От 1003 * до object
, но не от object
до string
.Следуя правилам, это означает, что преобразование из null
в string
лучше, чем преобразование из null
в object
, поэтому используется перегрузка с параметром string
.
Разрешение перегрузкиможет стать чрезвычайно сложным, когда задействованы следующие факторы:
- В наборе кандидатов могут быть универсальные методы
- Если есть универсальных методов , вывод типаприменяется к каждому из них отдельно, предоставляя различные возможности преобразования
- Если какие-либо аргументы являются группами методов, они могут быть преобразованы в различные типы делегатов - возможно, даже с использованием разных сигнатур методов, если именованная группа методов также имеет несколько перегрузок
- Наследование может привести к неожиданным результатам
- Массивы параметров (
params
) добавляют веселья - Необязательные параметры в C # 4 также влияют на решение
По сути, перегрузка может быть настоящей червей - там, где это возможно, создавайте перегрузки так, чтобы толькоодна из них когда-либо будет действительной целью любого данного вызова метода, так что вам не нужно беспокоиться о подробных правилах.