В программировании нередко значения переменных одного типа присваиваются переменным другого типа. Например, в приведенном ниже фрагменте кода целое значение типа int присваивается переменной с плавающей точкой типа float:
int i; float f; i = 10; f = i; // присвоить целое значение переменной типа float |
Если в одной операции присваивания смешиваются совместимые типы данных, то значение в правой части оператора присваивания автоматически преобразуется в тип, указанный в левой его части. Поэтому в приведенном выше фрагменте кода значение переменной i сначала преобразуется в тип float, а затем присваивается переменной f. Но вследствие строгого контроля типов далеко не все типы данных в C# оказываются полностью совместимыми, а, следовательно, не все преобразования типов разрешены в неявном виде.
Преобразование несовместимых типов все-таки может быть осуществлено путем приведения. Приведение типов, означает явное их преобразование.
Приведение — это команда компилятору преобразовать результат вычисления выражения в указанный тип. Ниже приведена общая форма приведения типов:
(целевой_тип) выражение |
Здесь целевой_тип обозначает тот тип, в который желательно преобразовать указанное выражение.
Если приведение типов приводит к сужающему преобразованию, то часть информации может быть потеряна. Например, в результате приведения типа long к типу int часть информации потеряется, если значение типа long окажется больше диапазона представления чисел для типа int, поскольку старшие разряды этого числового значения отбрасываются. Когда же значение с плавающей точкой приводится к целочисленному, то в результате усечения теряется дробная часть этого числового значения. Так, если присвоить значение 1,23 целочисленной переменной, то в результате в ней останется лишь целая часть исходного числа (1), а дробная его часть (0,23) будет потеряна. Давайте рассмотрим пример:
Обратите внимание, что переменная i1 корректно преобразовалась в тип byte, т.к. ее значение входит в диапазон этого типа данных. Преобразование переменной d в тип int вернуло целую часть этого числа. Преобразование переменной i2 вернуло значение переполнения.
Результат:
Для того чтобы преобразовать к нужному типу данных можно также использовать класс Convert и его методы. Использование некоторых методов показано в примере.
Результат: