Книга: C# для профессионалов. Том II
Преобразования базовых типов данных
Преобразования базовых типов данных
Преобразование типа является процессом, в котором значение, хранящееся в переменной одного типа данных преобразуется в значение другого типа данных. В C++ это можно сделать явно или неявно:
float f1 = 40.0;
long l1 = f1; // неявно
short s1 = (short)l1; // явно, старый стиль C
short s2 = short(f1); // явно, новый стиль C++
Если преобразование типа определяется явно, то это означает, что в коде явно указывается имя типа данных назначения. C++ позволяет написать явные преобразования типа любым из двух стилей — старым стилем С, в котором имя типа данных помещалось в скобки, или новым стилем, в котором имя переменной помещается в скобки. Оба стиля показаны выше и являются вопросом синтаксического предпочтения, выбор стиля не оказывает никакого влияния на код. В C++ допустимы преобразования любых базовых типов данных. Однако, если существует риск потери данных в связи с тем, что тип данных назначения имеет меньший диапазон значений, чем исходный тип данных, то компилятор может послать предупреждение в зависимости от настройки уровня предупреждений. В приведенном выше примере неявное преобразование типа может вызвать потерю данных, поэтому компилятор будет обычно порождать предупреждение. Явное определение преобразования является на самом деле способом сообщить компилятору что данное действие обдуманно, в результате это обычно приводит к подавлению всех предупреждений.
Так как C# создан с целью обеспечить большую безопасность типов, чем C++, он менее гибок в отношении преобразований между типами данных, Он также формализует понятие явного и неявного преобразования типов данных. Некоторые преобразования определены как неявные, что позволяет выполнить их либо с помощью неявного, либо явного синтаксиса. Другие можно делать только с помощью явного преобразования типов, и компилятор будет давать ошибку (а не предупреждение, как в C++), если попробовать выполнить его неявно.
Правила в C#, имеющие отношение к тому, какие базовые числовые типы данных могут быть преобразованы в другие типы данных, вполне логичны. Неявными преобразованиями будут преобразования, которые не создают риск потери данных, например, int
в long
или float
в double
. Явными преобразованиями являются такие, где может быть потеря данных в связи с ошибкой переполнения, ошибкой знака или потерей дробной части числа, например, float
в int
, int
в uint
или short
в ulong
. Кроме того, так как char
рассматривается несколько отдельно от других целых типов данных, можно преобразовывать только явно в или из char
.
Следующие выражения считаются допустимыми в коде C#:
float f1 = 40.0F;
long l1 = (long)f1; // явное, так как возможна ошибка округления
short s1 = (short)l1; // явное, так как возможна ошибка переполнения
int i1 = s1; // неявное — никаких проблем
uint i2 = (uint)i1; // явное, так как возможна ошибка знака
Отметим, что в C# явное преобразование типов данных всегда делается с помощью старого синтаксиса в стиле C. Новый синтаксис C++ использовать нельзя.
uint i2 = uint(i1); // неверный синтаксис - это не будет компилироваться
- Просмотр метаданных типов
- Распознавание типов
- Приведение числовых типов
- Определение членов типов в CIL
- Преобразования типов класса
- ГЛАВА 9. Специальные приемы построения типов
- Преобразования чисел
- Резервное копирование базы данных InterBase
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Владелец базы данных