Перейти к содержимому
Теория · Переменные и типы · урок 3 из 8

Встроенные типы

В прошлом уроке у коробок было две формы: int для целых чисел и string для текста. Программам нужны и другие формы: для цены с копейками, для ответа «да» или «нет», для одной буквы. Для частых случаев в C# есть встроенные типы — типы, которые язык знает сам: у каждого есть своё ключевое слово, например int или bool.

Чаще всего нужны семь встроенных типов:

C#
int apples = 12;
long people = 8100000000;
double distance = 2.5;
decimal price = 19.99m;
bool isOpen = true;
char grade = 'A';
string city = "Kazan";
Console.WriteLine(apples); // 12
Console.WriteLine(people); // 8100000000
Console.WriteLine(distance); // 2.5
Console.WriteLine(price); // 19.99
Console.WriteLine(isOpen); // True
Console.WriteLine(grade); // A
Console.WriteLine(city); // Kazan

Каждая переменная — коробка своей формы. Давайте разберём типы по группам.

Целые числа

int

int хранит целые числа от минус двух до плюс двух миллиардов с небольшим. Точные границы можно напечатать: их хранят int.MinValue и int.MaxValue.

C#
Console.WriteLine(int.MinValue); // -2147483648
Console.WriteLine(int.MaxValue); // 2147483647

Для счётчиков, возрастов и количеств почти всегда берут int.

long

long вмещает числа до 9223372036854775807 — это 19 цифр. Он нужен, когда двух миллиардов мало: население Земли, время в миллисекундах. Чтобы и небольшое число в коде считалось long, к нему дописывают суффикс L: 5L.

Здесь аналогии с формой коробки не хватает: у типа есть ещё и предел. Число 8100000000 целое, но в коробку int не войдёт, поэтому население Земли хранят в long.

Дробные числа

double

Число с точкой, например 2.5, в C# имеет тип double. Дробную часть в коде всегда отделяют точкой, а не запятой. double подходит для измерений: расстояния, веса, температуры.

Целое и дробное — разные формы коробок. Строка int price = 9.99; не скомпилируется: компилятор не отрезает дробную часть молча и сообщает об ошибке CS0266.

Комментарии в примерах показывают вывод на компьютере с английскими региональными настройками. Если в системе выбран русский формат чисел, первая программа урока напечатает 2,5 и 19,99: при печати программа отделяет дробную часть так, как задано в настройках компьютера. В коде точка остаётся точкой.

decimal

decimal хранит до 28–29 значащих цифр, а дробную часть держит десятичными цифрами, как в чеке. Поэтому цены и суммы денег хранят в decimal. Число для него пишут с суффиксом m: 19.99m.

Логический тип, символ и строка

bool

bool хранит ответ «да» или «нет»: true или false. Console.WriteLine печатает эти значения с заглавной буквы: True и False.

char

char хранит ровно один символ. В коде его пишут в одинарных кавычках: 'A', '7', '?'. 'A' и "A" — разные значения: первое — символ, второе — строка из одного символа.

string

string хранит текст любой длины, даже пустой. В коде его пишут в двойных кавычках: "Kazan", "".

Строка плюс число

Знак + между строкой и значением другого типа склеивает их в одну строку. Значение превращается в текст и приклеивается к строке:

C#
int apples = 12;
string text = "Apples: " + apples;
Console.WriteLine(text); // Apples: 12
Console.WriteLine("Open: " + true); // Open: True
Console.WriteLine("Sum: " + 2 + 3); // Sum: 23

Разберём последнюю строку. + выполняется слева направо, поэтому к строке "Sum: " сначала приклеивается 2, а потом 3. Получается текст Sum: 23, а не сумма 5.

Значимые типы

int, long, double, decimal, bool и char — значимые типы. Переменная такого типа хранит само значение, поэтому присваивание копирует его целиком: после b = a у каждой переменной своя копия. string в этот список не входит, но и строки после b = a живут отдельно: a = "Oslo" не меняет b.

Частая ошибка

Цену объявили как decimal, а суффикс m забыли:

C#
decimal price = 19.99; // ✗
Console.WriteLine(price);
TEXT
error CS0664: Literal of type double cannot be implicitly converted to type 'decimal'; use an 'M' suffix to create a literal of this type

Программа не компилируется. Число с точкой без суффикса — это double, и в коробку decimal его без явной пометки не кладут. Компилятор сам подсказывает решение: допишите m, и получится 19.99m.

Главное

  • Целые числа хранят в int (около ±2 миллиардов) и long (19 цифр), дробные — в double и decimal.
  • Деньги хранят в decimal, и число для него пишут с суффиксом m: 19.99m.
  • bool хранит true или false и печатается с заглавной буквы; char — один символ в одинарных кавычках, string — текст в двойных.
  • "Sum: " + 2 + 3 даёт Sum: 23: + со строкой склеивает текст слева направо.