Книга: C# для профессионалов. Том II

Простые типы

Простые типы

Ранее в разделе о ключевых словах было сделано подробное сравнение между примитивными типами данных Java и их эквивалентами в C# (по размеру). Был также введен ряд типов данных значений, представленных в C#, которых Java не имеет. Это были 8-битовый без знака byte (отличный от byte в Java, который имеет знак и отображается в sbyte в C#), короткое целое без знака ushort, целое без знака uint, длинное целое без знака ulong и, наконец, высокоточное decimal.

Целые значения

Когда целое число не имеет суффикса, то тип, с которым может быть связано его значение, оценивается в порядке int, uint, long, ulong, decimal. Целые значения представляются как десятичные или шестнадцатеричные литералы. В коде ниже результат равен 52 для обоих значений:

int dec = 52;
int hex = 0x34;
Console.WriteLine("decimal {0}, hexadecimal {1}", dec, hex);

Символьные значения

char представляет одиночный символ Unicode длиной два байта. C# расширяет гибкость присваивания символов, допуская присваивание с помощью шестнадцатеричной кодированной последовательности с префиксом х и представление Unicode с помощью u. Также нельзя неявно преобразовать символы в целые числа. Все другие обычные кодированные последовательности языка Java полностью поддерживаются.

Логические значения

bool, boolean в Java, используются для представления значений true и false непосредственно или как результат равенства, как показано ниже:

bool first_time = true;
cool second_time = (counter < 0);

Значения decimal

C# вводит тип данных decimal, который является 128-битовым типом данных, представляющим значения в диапазоне от примерно 1.0?1028 до 7.9?1028. Они предназначены прежде всего для финансовых и денежных вычислений, где точность является предельно важной. При присваивании типу decimal значения, к литеральному значению должно добавляться m, иначе компилятор считает значение типом double. Так как decimal не может неявно преобразовываться в double, то отсутствие m требует явного преобразования  типа:

decimal precise = 1.234m;
decimal precise = (decimal)1.234;

Значения с плавающей точкой

Значения с плавающей точкой могут быть либо double, либо float. При вычислениях все другие простые типы значений будут неявно преобразовываться, в соответствующий тип с плавающей точкой, если присутствует тип с плавающей точкой. Действительный числовой литерал с правой стороны оператора присваивания интерпретируется как double по умолчанию. Так как не существует неявного преобразования из float в double, может оказаться удивительным возникновение ошибок компиляции. Пример ниже иллюстрирует эту проблему:

float f = 5.6;
Console.WriteLine(x);

Этот пример будет создавать сообщение об ошибке компиляции, показанное ниже.

C:_wroxc# for java developerscodeSuperEXClass1.cs(15): Literal of type double cannot De implicitly converted to type 'float'; use an 'F' suffix to create a literal of this type

Существует два способа решения этой проблемы. Можно преобразовать литерал во float, но сам компилятор предлагает более разумную альтернативу. Использование суффикса F говорит компилятору, что это литерал типа float, а не double. Хотя и не обязательно, но можно использовать суффикс D, чтобы указать на литерал типа Double.

Оглавление книги


Генерация: 1.004. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз