Неявные преобразования типов
Неявное преобразование не требует со стороны программиста никакой дополнительной работы и никакого дополнительного кода. Рассмотрим пример кода:
var1 = var2;
Такое присваивание может включать в себя проведение неявного преобразования типов в том случае, если тип переменной var2 допускает проведение неявного преобразования в тип переменной var1.
Этот пример достаточно банален, поскольку с тем же успехом в этом присваивании могут быть задействованы две переменные одного и того же типа, и тогда никакого неявного преобразования типов вообще не требуется.
Рассмотрим другой пример.
Значения типов ushort и char являются фактически взаимозаменяемыми, поскольку оба они предполагают хранение чисел в диапазоне между 0 и 65 535. Можно осуществлять преобразования этих типов друг в друга неявно, что иллюстрируется следующим кодом:
ushort Code;
char Symbol = 'a' ;
Code = Symbol;
Console.WriteLine("Символ: {0}", Symbol);
Console.WriteLine("Код символа: {0}" , Code);
В этом коде значение, хранящееся в переменной Symbol, переносится в переменную Code. Затем две команды Console.WriteLine() дают следующий выходной поток:
Символ: а
Код символа: 97
Хотя в обеих переменных хранится одна и та же информация, она интерпретируется совершенно по-разному в зависимости от типа переменной.
Для простых типов существует большое количество неявных преобразований; для типов bool и string неявных преобразований не существует, зато они имеются у численных типов. В таблице показаны преобразования численных типов, которые могут выполняться компилятором неявно (значения типа char хранятся в виде чисел, поэтому мы рассматриваем char как численный тип).
Тип данных | неявно приводится к |
byte | short, ushort, int, uint, long, ulong, float, double, decimal |
sbyte | short, int, long, float, double, decimal |
short | int, long, float, double, decimal |
ushort | int, uint, long, ulong, float, double, decimal |
int | long, float, double, decimal |
uint | long, ulong, float, double, decimal |
long | float, double, decimal |
ulong | float, double, decimal |
float | double |
char | ushort, int, uint, long, ulong, float, double, decimal |
Правило неявных преобразований для рассматриваемых типов: любой тип А, диапазон допустимых значений которого целиком находится внутри диапазона допустимых значений типа В, может быть преобразован неявным образом в этот тип.
Например, константы типа int можно присваивать переменным типов sbyte, byte, short, ushort, uint, или ulong, в случае, если они могут их принять, то есть, если присваиваемое значение не превышает предельное значение для типа данных переменной-приемника .
Дата добавления: 2021-12-14; просмотров: 308;