Вход/Регистрация
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:\_wrox\c# for java developers\code\SuperEX\Class1.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
.

Типы перечислений

Перечисление является отдельным типом, состоящим из множества именованных констант. В Java можно добиться этого, используя переменные

static final
. В этом смысле перечислении могут в действительности быть частью класса, который их использует. Другой подход состоит в определении перечисления как интерфейса. Пример ниже иллюстрирует такую концепцию:

interface Color {

 static int RED = 0;

 static int GREEN = 1;

 static int BLUE = 2;

}

Этот подход проблематичен тем, что он не является безопасным в отношении типов данных. Любое считанное или вычисленное целое используется в качестве цвета. Можно, однако, программным путем реализовать перечисление с безопасными типами в Java, используя вариант шаблона (паттерна) Singleton, который ограничивает класс предопределенным числом экземпляров. Приведенный далее код показывает, как это можно сделать:

final class Day {

  • Читать дальше
  • 1
  • ...
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: