Я предполагаю, что компилятор видит, что существует неявное преобразование из B
в int
и неявное (встроенное) преобразование из int
в decimal
, так что он может использовать оба в последовательность. Другими словами, вызов становится D((decimal)(int)b)
.
Обратите внимание, что ничего не обрезается; скорее, int
повышается до decimal
. Если вместо этого вы закомментируете преобразование int
, я ожидаю, что I(b)
не удастся, поскольку, хотя существует неявное приведение от B
до decimal
, неявное приведение от decimal
до int
.