Совместимость и приведение типов

В операторах присваивания (см. главу 7) часто возникает необходимость переменной одного типа присвоить значение выражения другого типа. При этом следует учитывать совместимость типов. Пусть переменная имеет тип Т1, а выражение — Т2. Эти типы считаются совместимыми, если:

q оба они есть один и тот же тип;

q оба они вещественные;

q оба они целые и диапазон значений Т2 является подмножеством значений Т1;

q тип Т1 — вещественный, а Т2 — целый;

q тип Т1 — строка, а Т2 — символ;

q тип Т2 является прямым или косвенным потомком класса Т1.

Если типы несовместимы, тип Т2 следует, если это возможно, привести к типу Т1. Приведение типов реализуется неявно, когда при вычислении выражения встречаются операнды, принадлежащие разным, но совместимым типам. При этом тип Т2 операнда становится типом Т1 выражения так, как показано ранее. Например, если оба операнда имеют тип char и осуществляется их сложение, результатом операции становится тип string.

Явное приведение достигается тем, что перед выражением или операндом в круглых скобках указывается тип, к которому он приводится. Например:

int in1 = 1, in2 = 2;

byte b1;

b1 = in1 + in2; // Ошибка! Тип int не совместим с типом byte

b1 = (byte)(in1 + in2); // Правильное преобразование

При явном преобразовании типов может происходить искажение результата или потеря точности. Например:

int in1 = 1000, in2 = 2;

byte b1 = (byte)(in1 + in2);

Console.WriteLine(b1); // Вывод: 234

Предлагаю ознакомиться с аналогичными статьями: