C #
ECMA-334 утверждает, что сложение определяется как допустимое только для int + int, uint + uint, long + long и ulong + ulong (ECMA-334 14.7.4). Как таковые, это возможные операции, которые необходимо учитывать в отношении 14.4.2. Поскольку существуют неявные приведения от байта к int, uint, long и ulong, все члены функции сложения являются применимыми членами функции согласно 14.4.2.1. Мы должны найти лучшее неявное приведение по правилам в 14.4.2.3:
Приведение (C1) к int (T1) лучше, чем приведение (C2) к uint (T2) или ulong (T2), потому что:
- Если T1 - int, а T2 - uint или ulong, C1 - лучшее преобразование.
Преобразование (C1) в int (T1) лучше, чем приведение (C2) к long (T2), поскольку существует неявное приведение от int к long:
- Если неявное преобразование из T1 в T2 существует, и не существует неявного преобразования из T2 в T1, C1 - лучшее преобразование.
Следовательно, используется функция int + int, которая возвращает int.
Это очень длинный способ сказать, что он очень глубоко скрыт в спецификации C #.
CLI
CLI работает только на 6 типах (int32, native int, int64, F, O и &). (ECMA-335, раздел 3, раздел 1.5)
Байт (int8) не относится к этим типам и автоматически добавляется к int32 перед добавлением. (ECMA-335, раздел 3, раздел 1.6)