Глава 3. Базовые типы данных, переменные
75
преобразованиями по приведению типов). Такие преобразования нужны
тогда, когда при вычислениях имеется угроза потери данных. Преобра-
зования с помощью вспомогательных классов требуются для преобра-
зования несовместимых типов, например, строковых данных в числа и
наоборот.
Пусть переменная типа
int
должна быть преобразована в переменную
типа
long
. Это преобразование выполняется неявно, т. к. любое значе-
ние типа
int
может храниться в переменной типа
long
, и оба типа пред-
ставляют собой числа. C# выполняет такое преобразование автомати-
чески.
Однако обратное преобразование может вызвать проблемы. Некоторые
значения, которые могут храниться в переменной
long
, не помещаются
в переменной типа
int
(по определению самих переменных). Компиля-
тор не знает, случится ли такая ситуация или нет в процессе расчетов,
поэтому, если вы просто присвоите переменной типа
int
значение пере-
менной типа
long
, компилятор выдаст ошибку. Но если вы точно знаете,
что такое преобразование вполне допустимо и числа таковы, что потери
части числа при присвоении не случится, то можете воспользоваться
специальным
оператором
приведения
типов
(явный тип преобразова-
ния), который имеет вид:
(тип)
, где
тип
— тип данных, к которому при-
водится данное, стоящее за этим оператором. Например, имеем:
int a;
long b;
. Запись
a=b;
вызовет ошибку компиляции. Но запись
a=(int)b;
пройдет. Оператор
(int)
— оператор приведения к типу
int
числа типа
long
. При приведении типов имя требующегося типа размещается в
круглых скобках непосредственно перед преобразуемым значением.
Такая же ситуация складывается и с числами типов
float
и
double
. Пер-
вый тип преобразуется во второй автоматически, а второй — только
принудительно, как только что показано с типом
long
. Например,
float
aa=(float)1.2;
компилируется нормально, а
float aa=1.2;
дает ошиб-
ку, потому что константа
1.2
интерпретируется по умолчанию как тип
double
.
Целые числа могут быть преобразованы в числа с плавающей точкой
автоматически, но обратное преобразование требует использования
оператора приведения типов. Например,
double b=1.2;
long a=12;
a=(long)b;
компилятор пропустит, а
a=b;
нет. Ясно, что при таком пре-
образовании дробная часть числа, если она имеется, будет отброшена.
Возникнет погрешность вычисления.
Все приведения к типу
decimal
и из него требуют применения операто-
ра приведения типов. Все числовые типы могут быть преобразованы
в другие числовые типы с помощью этого оператора.
76
Do'stlaringiz bilan baham: |