Встроенные типы в C#
Мы продолжаем знакомиться с языком программирования C#. Сегодня поговорим о типах данных и начнем с наиболее часто используемых – встроенных типов. К ним относятся:
- Целочисленный
- С плавающей запятой
- Логический
- Символьный
- Строковый
Они идут вместе с языком и для работы с ними не нужно подключать дополнительные библиотеки. Вообще, таких типов гораздо больше, но сегодня мы познакомимся с самыми основными.
Но для начала, поговорим о переменных.
Переменные
Переменную можно представлять как коробку.
- У каждой коробки есть наклейка – ее имя (название переменной). По названию мы можем догадаться, что в ней лежит.
- У коробки есть форма – ее тип (тип переменной). В одни коробки можно класть только книги, в другие – только яблоки, в третьи – только посуду.
- То, что лежит внутри коробки – это значение. Сегодня в коробке с яблоками лежит 5 яблок, завтра мы можем достать 5 и положить 10.
В коде на C# это может выглядеть так:
// Мы говорим компьютеру: // 1. Возьми коробку с наклейкой "age" // 2. Эта коробка предназначена ТОЛЬКО для целых чисел (int) // 3. Положи в нее значение 25 int age = 25; // А теперь команда: достань значение из коробки "age" и напечатай его! Console.WriteLine(age); // Напечатает: 25 // Потом мы решили поменять то, что лежит в коробке. // Убрали 25 и положили 26. age = 26; Console.WriteLine(age); // Теперь напечатает: 26
То есть переменная – это место в памяти компьютера, у которого есть имя (как мы к нему обращаемся), тип (что именно мы можем в него положить: число, текст и т.д.) и значение (то, что лежит внутри прямо сейчас). Значение можно менять, но тип менять нельзя.
Про типизацию
Если бы нужно было описать C# одним словом, то “строгий” подошло бы идеально. Но не в смысле “суровый”, а в смысле “четкий, принципиальный и соблюдающий правила”.
Другими словами, C# требует ясности и не любит неопределенности. Вы должны заранее объявить, какого типа данные будет хранить переменная (например, число или текст). И после этого язык будет строго следить, чтобы вы не пытались работать с этими данными как с чем-то другим.
Представьте, что у вас есть коробки с надписями:
- “Фрукты” – можно класть только яблоки, апельсины и т.д.
- “Посуда” – только тарелки, чашки.
- “Игрушки” – только машинки, куклы.
C# – это тот самый строгий складской работник, который не даст вам положить яблоко в коробку с посудой. Он заранее проверяет эти правила (на этапе компиляции) и просто не допустит сборки программы, если они нарушены.
Главные следствия строгой типизации:
- Обязательное объявление типа. Вы не можете просто создать переменную. Вы должны сразу сказать, какого она типа.
Так можно:
int number; // Объявляем переменную типа "целое число" string text; // Объявляем переменную типа "строка" bool isReady; // Объявляем переменную "логического" типа (да/нет)
Так нельзя в C# (в отличие от, например, JavaScript или Python):
number = 10; // Ошибка! Что такое number? Какой у него тип?
- Невозможность смешивать типы. Самое главное правило: нельзя присвоить переменной значение несовместимого типа.
int number; number = 10; // Все ок, 10 - это целое число number = "Привет"; // ОШИБКА! Строку нельзя положить в переменную для чисел. string text; text = "Привет"; // Ок text = 10; // ОШИБКА! Число нельзя положить в переменную для строк.
- Контроль на этапе написания кода (компиляции). Эта строгость очень полезна! Ошибки, связанные с неправильным использованием типов, компилятор найдет еще до того как вы запустите программу. Это избавляет от множества коварных ошибок, которые в других языках всплывают только во время работы программы.
А теперь, давайте рассмотрим каждый встроенный тип подробнее.
Целочисленный тип
Целочисленные типы – это типы данных для целых чисел (без дробной части). Как номера страниц в книге – 1, 2, 3, но не 1.5.
Таких типов несколько – чтобы экономно использовать память. Главное правило – выбирайте тип в зависимости от того, насколько большое число вы хотите в него положить.
Представьте себе контейнеры разного размера:
Небольшие числа
sbyte(-128 до 127) – Крошечная баночка. Для очень маленьких чисел.byte(0 до 255) – Та же баночка, но только для положительных. Например, для цвета пикселя.short(~ -32 тыс. до +32 тыс.) – Небольшая коробка. Для счетчиков, небольших сумм.
Самый частый и удобный
int(~ -2 млрд. до +2 млрд.) – Большая, стандартная картонная коробка. Используется чаще всего по умолчанию. Хватит для большинства задач: возраст, цена, количество предметов в инвентаре.
Для огромных чисел
long(ОЧЕНЬ большое число) – Огромный грузовой контейнер. Нужен для астрономических расчетов, когдаintуже не хватает.
Основной вывод – когда нужно работать с целыми числами, в 95% случаев начинайте с int. Он самый удобный и привычный. Про остальные типы пока нужно просто знать. К ним можно будет вернуться, когда столкнетесь с задачей, где нужно сэкономить память или работать с огромными значениями.
int age = 25; // Возраст - всегда целое число int coins = 100; // Количество монет long distanceToMoon = 384400000; // Большое число - нужен long
Основные операции, которые можно выполнять с целыми числами – это арифметические и операции сравнения.
Арифметические: +, -, *, /, %, ++, --
int a = 10, b = 3; Console.WriteLine(a + b); // 13 (сложение) Console.WriteLine(a - b); // 7 (вычитание) Console.WriteLine(a * b); // 30 (умножение) Console.WriteLine(a / b); // 3 (деление, целая часть) Console.WriteLine(a % b); // 1 (остаток от деления) a++; // 11 (увеличение значения на единицу - инкремент) b--; // 2 (уменьшение значения на единицу - декремент)
Сравнение: ==, !=, >, <, >=, <=
int x = 5, y = 8; Console.WriteLine(x == y); // False (равно) Console.WriteLine(x != y); // True (не равно) Console.WriteLine(x > y); // False (больше) Console.WriteLine(x < y); // True (меньше) Console.WriteLine(x >= 5); // True (больше или равно) Console.WriteLine(y <= 7); // False (меньше или равно)
Числа с плавающей запятой
Это типы данных для дробных чисел (с запятой). Например: 3.14, -10.5, 0.001.
Название «плавающая запятая» означает, что положение запятой может «плавать», то есть меняться, чтобы представить как очень маленькие, так и очень большие числа.
Главные герои
float– Обычная мензурка. Благодаря небольшой точности (~6-9 знаков) занимает мало памяти.double– Большая точная колба. Высокая точность (~15-17 знаков), но занимает вдвое больше памяти, чемfloat.decimal— Финансовые электронные весы. Самая высокая точность (~28-29 знаков), исключает ошибки округления. Чаще всего используется для денежных расчетов, где важна каждая копейка.
Советы по выбору. Если хочешь просто дробное число – выбирай double. Если работаешь с деньгами – используй decimal, чтобы избежать ошибок округления. Если нужно сэкономить память в массиве из миллиона чисел – обрати внимание на float.
double distance = 1234.567; // Расстояние (по умолчанию double) decimal accountBalance = 1500.75m; // Баланс счета (деньги!) float engineEfficiency = 0.85f; // КПД двигателя (с суффиксом f)
Рассмотрим основные операции, которые можно выполнять над числами с плавающей запятой.
Арифметические: +, -, *, /, %, ++, --
double a = 5.5, b = 2.0; Console.WriteLine(a + b); // 7.5 Console.WriteLine(a / b); // 2.75 Console.WriteLine(a % b); // 1.5 a++; // 6.5
Сравнение: ==, !=, >, <, >=, <=
double x = 3.14, y = 2.71; Console.WriteLine(x == y); // False Console.WriteLine(x > y); // True Console.WriteLine(x <= 3.14); // True
Специальные математические функции:
double num = 4.0; Console.WriteLine(Math.Sqrt(num)); // 2.0 (квадратный корень) Console.WriteLine(Math.Round(3.14159, 2)); // 3.14 (округление) Console.WriteLine(Math.Abs(-5.5)); // 5.5 (модуль)
Логический тип
bool – это тип данных для ответа “Да” или “Нет”. Принимает только два значения:
true– “Да”, “Истина”, “Включено”, “Присутствует”false— “Нет”, “Ложь”, “Выключено”, “Отсутствует”
Представьте себе выключатель света: он либо включен (true), либо выключен (false). Третьего не дано.
Логический тип используется для ответа на вопросы, которые требуют ответа “Да” или “Нет”:
- Включен ли свет?
- Куплен ли билет?
- Есть ли новое сообщение?
- Играет ли сейчас музыка?
bool isLightOn = true; // Свет включен? - Да bool isTaskCompleted = false; // Задача выполнена? - Нет bool hasDiscount = true; // Есть скидка? - Да
Основной сценарий использования bool – в условных выражениях (if). Программа принимает решения на основе этих значений. Подробнее об условных выражениях поговорим в следующей статье, а пока запомните, что в зависимости от логического значения можно выполнять разные инструкции.
bool isUserLoggedIn = true;
if (isUserLoggedIn) // Если (isUserLoggedIn == true)...
{
Console.WriteLine("Показываем личный кабинет!");
}
else
{
Console.WriteLine("Показываем форму входа!");
}
// На экране: "Показываем личный кабинет!"
Чаще всего bool получается в результате проверки условия.
int age = 25; // Задаем вопросы и получаем ответ true/false bool isAdult = age >= 18; // true (25 >= 18 -> ДА) bool isSenior = age > 65; // false (25 > 65 -> НЕТ) bool isTwentyFive = age == 25; // true (25 == 25 -> ДА) Console.WriteLine(isAdult); // Выведет: True
Для закрепления, bool – это простейший “переключатель” с двумя состояниями, который помогает программе принимать решения. Вся логика работы программ построена на этом типе. true – Да, false – Нет.
Символьный тип
char – это тип для хранения одного символа. Буквы, цифры, знаки препинания, смайлы – все что угодно, но только один символ. Представьте себе ячейку для одной буквы в кроссворде. В одну ячейку можно вписать только один символ.
Пишется в одинарных кавычках ' ', в отличие от строк, которые в двойных " " (о них чуть дальше). Объявление переменной в коде выглядит следующим образом:
char grade = 'A'; // Оценка - латинская буква char digit = '7'; // Цифра (но как символ!) char symbol = '!'; // Знак препинания char russianLetter = 'Б'; // Русская буква char heart = '❤'; // Символ эмодзи // Важно! Цифра в кавычках — это не число, а символ char symbol = '5'; // Это символ "пятерка" int number = 5; // Это число 5
Переменные типа char можно проверять и преобразовывать:
char input = 'A'; bool isLetter = char.IsLetter(input); // true - это буква? bool isDigit = char.IsDigit(input); // false - это цифра? bool isUpper = char.IsUpper(input); // true - это заглавная? char letter = 'a'; char upperLetter = char.ToUpper(letter); // 'A' - делаем заглавной
Еще один распространенный пример использования char – в условиях:
char operation = '+';
if (operation == '+')
{
Console.WriteLine("Сложение!");
}
else if (operation == '-')
{
Console.WriteLine("Вычитание!");
}
Строковый тип
string – это тип данных для работы с текстом. Текстом может быть и одна буква, и слово, и предложение и даже целая книга. Строки хранят любое количество символов и пишутся в двойных кавычках " ".
В коде это выглядит следующим образом:
string name = "Анна"; // Имя string greeting = "Привет!"; // Приветствие string emptyString = ""; // Пустая строка string numberAsText = "123"; // Цифры, но как текст! string longText = "Это очень длинный текст..."; // Много текста
Строки можно складывать:
string firstName = "Иван"; string lastName = "Петров"; string fullName = firstName + " " + lastName; // "Иван Петров"
Сравнивать:
string password = "secret"; bool isCorrect = password == "secret"; // true - совпадает?
Работать с отдельными символами:
string word = "Кот"; char firstLetter = word[0]; // 'К' - первый символ (индекс 0) char secondLetter = word[1]; // 'о' - второй символ (индекс 1)
Использовать полезные методы:
string text = "Привет, мир!";
int length = text.Length; // 12 - длина строки
string upper = text.ToUpper(); // "ПРИВЕТ, МИР!" - верхний регистр
string lower = text.ToLower(); // "привет, мир!" - нижний регистр
bool contains = text.Contains("мир"); // true - содержит подстроку?
string numberAsText = "12";
int number = int.Parse(numberAsText); // 12 - преобразуем строку в число
string – это главный инструмент для работы с текстом:
- Имена пользователей
- Сообщения, описания
- Адреса, email
- Любые текстовые данные
Практический пример
Давайте попробуем использовать все эти типы данных в настоящей программе.
Прежде всего, нужно создать проект консольного приложения .NET Core в Visual Studio. Если Visual Studio 2022 уже установлена, выполните следующие шаги, чтобы создать новый проект:
- Запустите Visual Studio IDE.
- Нажмите “Create new project”.
- В окне “Create new project”, выберите “Console App (.NET Core)” из списка доступных шаблонов.
- Нажмите “Next”.
- В окне “Configure your new project”, укажите название и расположение нового проекта.
- Нажмите “Next”.
- В окне “Additional information”, выберите “.NET 8.0 (Long Term Support)” в качестве фреймворка, который вы хотите использовать.
- Нажмите “Create”.
Напишем программу, которая выводит на экран профиль пользователя, используя базовые типы данных. Для этого удалите из файла Program.cs его содержимое и добавьте следующий код:
using System;
class Program
{
static void Main()
{
// 1. STRING - Имя пользователя
string userName = "Анна";
Console.WriteLine("Имя: " + userName);
// 2. INT - Возраст и год рождения
int userAge = 26;
int currentYear = 2025;
int birthYear = currentYear - userAge; // Простое вычисление
Console.WriteLine("Возраст: " + userAge);
Console.WriteLine("Год рождения: " + birthYear);
// 3. DOUBLE - Рост и вес (с дробной частью)
double height = 1.75; // метры
double weight = 68.5; // кг
Console.WriteLine("Рост: " + height + " м");
Console.WriteLine("Вес: " + weight + " кг");
// 4. CHAR - Пол (один символ)
char gender = 'Ж'; // 'М' или 'Ж'
Console.WriteLine("Пол: " + gender);
// 5. BOOL - Признаки (да/нет)
bool hasDriverLicense = true;
bool hasPets = false;
Console.WriteLine("Есть водительские права: " + hasDriverLicense);
Console.WriteLine("Есть домашние животные: " + hasPets);
// 6. Склеивание строк
string profileSummary = "Имя - " + userName + ", Возраст - " + userAge;
Console.WriteLine("Краткая анкета: " + profileSummary);
}
}
Пример вывода программы:
Имя: Анна Возраст: 26 Год рождения: 1999 Рост: 1,75 м Вес: 68,5 кг Пол: Ж Есть водительские права: True Есть домашние животные: False Краткая анкета: Имя - Анна, Возраст - 26
В качестве самостоятельной работы, попробуйте добавить в профиль новые поля. Например, любимый фильм, возраст в месяцах, есть ли пользователю 18 лет. Какого типа должны быть каждое из новых полей? Попробуйте выполнить какие-то операции над известными данными, чтобы получить новые.
Заключение
Итак, сегодня мы поговорили об одной из базовых тем при изучении любого языка программирования – типах данных. Узнали, как в C# представляются числа, логические значения, символы и строки. Это основа, на которой будут строиться все будущие программы, которые вы создадите. Эти, казалось бы, простые кирпичики – int, string, bool и char – это магия, которая позволяет компьютеру понимать ваши идеи. С их помощью вы сможете описывать целые миры: от анкеты пользователя до сложной игровой вселенной. Так что смело стройте свои первые проекты – впереди вас ждет увлекательное путешествие в мир C#! Творите с удовольствием.