Обеспечивает ли оператор + = EXPLICIT преобразование или неявное CASTING в C #? - PullRequest
9 голосов
/ 04 марта 2012

Пример ниже компилируется:

public static void Main()
{
    Byte b = 255;
    b += 100;

}

но нижеприведенный код не срабатывает

   public static void Main()
    {
        Byte b = 255;
        b = b + 100;
    }

с

Ошибка 1 Не удается неявно преобразовать тип 'int' в 'byte'. Существует явное преобразование (вам не хватает приведения?)

Значит ли это, что для C # + = оператор обеспечивает EXPLICIT преобразование?

1 Ответ

11 голосов
/ 04 марта 2012

Эрик Липперт ответил на ваш вопрос очень долго .

Еще один интересный аспект предопределенных составных операторов заключается в том, что при необходимости приведение - якобы «явное» преобразование - вводится неявно от вашего имени.Если вы говорите

short s = 123;
s += 10;

, то это не анализируется как s = s + 10, потому что short плюс int - это int, поэтому присваивание неверное.Фактически это анализируется как

s = (short)(s + 10);

, так что если результат переполняется коротким, он автоматически урезается до размера.

См. Также часть вторая.

...