Основы языка C# 2005. Евсеева О.Н - 61 стр.

UptoLike

Составители: 

65
sh1 = (short)(b1 + b2);
in1 = b1 + b2 + sh1;
Console.WriteLine("b3= " + b3 + " sh1= " + sh1 + " in1= " + in1);
}//Express
Разберем этот фрагмент. Начнем с первого закомментированного
оператора присваивания b3 = b1+b2;. Выражение здесь простейшее, включает
одну бинарную операцию сложения. Оба операнда имеют тип byte, казалось бы,
и результат должен быть типа byte и без помех присвоен переменной b3.
Однако это не так. Для данных типа byte нет перегруженной реализации
сложения. Ближайшей операцией является сложение целых типа int. Поэтому
оба операнда преобразуются к типу int, выполняется операция сложения,
результат имеет тип int и не может быть неявно преобразован в тип byte, –
возникает ошибка еще на этапе компиляции. Корректная запись показана в
следующем операторе. Аналогичная ситуация возникает, когда в левой части
оператора стоит переменная типа short, - и здесь необходимо явное приведение
к типу. Этого приведения не требуется, когда в левой части стоит переменная
типа int.
Давайте разберем, как в данном примере организован вывод в методе
WriteLine. До сих пор при вызове метода задавалось несколько параметров и
использовалась форма вывода данных с подстановкой значений параметров в
строку, заданную первым параметром. Здесь же есть только один параметр
это строка, заданная сложным выражением. Операция, многократно
применяемая в этом выражении, это сложение « + ». Операнды сложения
имеют разный тип: левый операнд имеет тип string, правыйарифметический
(byte, short, int). В этом случае арифметический тип преобразуется к типу string
и выполняется сложение строк (конкатенация). При преобразовании
арифметического типа к типу string вызывается метод ToString(), определенный
для всех встроенных типов. Результатом этого выражения является строка, она
и будет результатом вывода метода WriteLine.
4.3. Вычисление выражений
Вычисление выражения начинается с выполнения операций высшего
приоритета. Первым делом вычисляются выражения в круглых скобках(expr),
определяются значения полей объектаx.y, вычисляются функцииf(x),
переменные с индексамиa[i]. Выполнение этих операций достаточно понятно
и не нуждается в комментировании. Операции checked и unchecked включают и
выключают проверку преобразований арифметического типа в выражениях,
которым они предшествуют.