Мастерство C# переменных и примитивных типов данных: полное руководство
Переменные и (примитивные) типы данных C#
В этом уроке мы узнаем о переменных, как создавать переменные в C# и различных типах данных, которые поддерживает язык программирования C#.
Переменная — символическое имя, данное участку памяти. Переменные используются для хранения данных в компьютерной программе.
Как объявлять переменные в C#?
Пример объявления переменной в C#.
int age;
В этом примере переменная age типа int (целое число) объявлена и может хранить только целые значения.
Мы можем присвоить значение переменной позже в программе так:
int age; ... ... ... age = 24;
Однако переменную можно также инициализировать значением при объявлении. Например,
int age = 24;
Здесь переменная age типа int объявлена и инициализирована значением 24 одновременно.
Поскольку это переменная, мы можем менять значение переменных. Например,
int age = 24; age = 35;
Здесь значение age изменено на 35 из 24.
Переменные в C# должны быть объявлены перед использованием. Это значит, имя и тип переменной должны быть известны перед присваиванием значения. Именно поэтому C# называется статически типизированным языком.
После объявления тип данных переменной не может быть изменён в пределах области видимости. Область видимости можно представить как блок кода, где переменная видна или доступна для использования. Если вы не поняли предыдущее утверждение, не волнуйтесь — мы узнаем об областях видимости в следующих главах.
Пока запомните, в C# НЕЛЬЗЯ делать следующее:
int age; age = 24; ... ... ... float age;
Неявно типизированные переменные
Альтернативно в C# мы можем объявить переменную без знания её типа с ключевым словом var. Такие переменные называются неявно типизированными локальными переменными.
Переменные, объявленные с var, должны быть инициализированы в момент объявления.
var value = 5;
Компилятор определяет тип переменной из присваиваемого значения. В примере выше value имеет тип int. Это эквивалентно:
int value; value = 5;
Узнайте больше о неявно типизированных локальных переменных.
Правила именования переменных в C#
Существуют определённые правила, которых нужно следовать при именовании переменной. Правила именования переменной в C#:
- Имя переменной может содержать буквы (верхний и нижний регистр), подчёркивание (_) и цифры только.
- Имя переменной должно начинаться либо с буквы, подчёркивания или символа @. Например,
Правила именования переменных в C# Имена переменных Примечания name Валидно subject101 Валидно _age Валидно (лучшая практика для приватных полей) @break Валидно (используется если имя — зарезервированное ключевое слово) 101subject Невалидно (начинается с цифры) your_name Валидно your name Невалидно (содержит пробел) - C# чувствителен к регистру. Это значит age и Age ссылаются на 2 разные переменные.
- Имя переменной не должно быть ключевым словом C#. Например,
if,for,usingне могут быть именем переменной. Мы обсудим ключевые слова C# в следующем уроке.
Лучшие практики именования переменной
- Выбирайте имя переменной, которое имеет смысл. Например, name, age, subject имеют больше смысла, чем n, a и s.
- Используйте нотацию camelCase (начинается с строчной буквы) для именования локальных переменных. Например, numberOfStudents, age и т.д.
- Используйте PascalCase или CamelCase (начинается с заглавной буквы) для именования публичных полей. Например, FirstName, Price и т.д.
- Используйте ведущее подчёркивание (_) с нотацией camelCase для именования приватных полей. Например, _bankBalance, _emailAddress и т.д.
Узнайте больше о соглашениях именования в C# здесь.
Не волнуйтесь о публичных и приватных полях. Мы узнаем о них в следующих главах.
Примитивные типы данных C#
Переменные в C# широко классифицируются на два типа: Value types (типы значений) и Reference types (ссылочные типы). В этом уроке мы обсудим примитивные (простые) типы данных, которые являются подклассом типов значений.
Ссылочные типы будут охвачены в следующих уроках. Однако если хотите узнать больше о типах переменных, посетите C# Types and variables (официальные C# доки).
Boolean (bool)
- Булев тип данных имеет два возможных значения:
trueилиfalse - Значение по умолчанию:
false - Булевы переменные обычно используются для проверки условий, таких как в if statements, loops и т.д.
Например:
using System;
namespace DataType
{
class BooleanExample
{
public static void Main(string[] args)
{
bool isValid = true;
Console.WriteLine(isValid);
}
}
}
При запуске программы вывод будет:
True
Знаковые целые (Signed Integral)
Эти типы данных хранят целые значения (как положительные, так и отрицательные). Из общего доступного количества бит, один бит используется для знака.
1. sbyte
- Размер: 8 бит
- Диапазон: -128 до 127.
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class SByteExample
{
public static void Main(string[] args)
{
sbyte level = 23;
Console.WriteLine(level);
}
}
}
Вывод:
23
Попробуйте присвоить значения вне диапазона (меньше -128 или больше 127) и посмотрите, что произойдёт.
2. short
- Размер: 16 бит
- Диапазон: -32 768 до 32 767
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class ShortExample
{
public static void Main(string[] args)
{
short value = -1109;
Console.WriteLine(value);
}
}
}
Вывод:
-1109
3. int
- Размер: 32 бита
- Диапазон: -2 147 483 648 до 2 147 483 647
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class IntExample
{
public static void Main(string[] args)
{
int score = 51092;
Console.WriteLine(score);
}
}
}
Вывод:
51092
4. long
- Размер: 64 бита
- Диапазон: -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
- Значение по умолчанию:
0L[L в конце обозначает, что значение типа long]
Например:
using System;
namespace DataType
{
class LongExample
{
public static void Main(string[] args)
{
long range = -7091821871L;
Console.WriteLine(range);
}
}
}
Вывод:
-7091821871
Беззнаковые целые (Unsigned Integral)
Эти типы данных хранят только значения больше или равные 0. Обычно используются, когда уверены, что отрицательных значений не будет.
1. byte
- Размер: 8 бит
- Диапазон: 0 до 255.
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class ByteExample
{
public static void Main(string[] args)
{
byte age = 62;
Console.WriteLine(age);
}
}
}
Вывод:
62
2. ushort
- Размер: 16 бит
- Диапазон: 0 до 65 535
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class UShortExample
{
public static void Main(string[] args)
{
ushort value = 42019;
Console.WriteLine(value);
}
}
}
Вывод:
42019
3. uint
- Размер: 32 бита
- Диапазон: 0 до 4 294 967 295
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class UIntExample
{
public static void Main(string[] args)
{
uint totalScore = 1151092;
Console.WriteLine(totalScore);
}
}
}
Вывод:
1151092
4. ulong
- Размер: 64 бита
- Диапазон: 0 до 18 446 744 073 709 551 615
- Значение по умолчанию: 0
Например:
using System;
namespace DataType
{
class ULongExample
{
public static void Main(string[] args)
{
ulong range = 17091821871L;
Console.WriteLine(range);
}
}
}
Вывод:
17091821871
Числа с плавающей точкой (Floating Point)
Эти типы данных хранят значения с плавающей точкой, то есть числа, содержащие десятичные значения. Например, 12.36, -92.17 и т.д.
1. float
- Одинарной точности тип с плавающей точкой
- Размер: 32 бита
- Диапазон: 1.5 × 10−45 до 3.4 × 1038
- Значение по умолчанию: 0.0F [F в конце обозначает тип float]
Например:
using System;
namespace DataType
{
class FloatExample
{
public static void Main(string[] args)
{
float number = 43.27F;
Console.WriteLine(number);
}
}
}
Вывод:
43.27
2. double
- Двойной точности тип с плавающей точкой. В чём разница между одинарной и двойной точностью?
- Размер: 64 бита
- Диапазон: 5.0 × 10−324 до 1.7 × 10308
- Значение по умолчанию: 0.0D [D в конце обозначает тип double]
Например:
using System;
namespace DataType
{
class DoubleExample
{
public static void Main(string[] args)
{
double value = -11092.53D;
Console.WriteLine(value);
}
}
}
Вывод:
-11092.53
Символ (char)
- Представляет 16-битный unicode символ.
- Размер: 16 бит
- Значение по умолчанию: '\0'
- Диапазон: U+0000 ('\u0000') до U+FFFF ('\uffff')
Например:
using System;
namespace DataType
{
class CharExample
{
public static void Main(string[] args)
{
char ch1 = '\u0042';
char ch2 = 'x';
Console.WriteLine(ch1);
Console.WriteLine(ch2);
}
}
}
Вывод:
B x
Unicode значение 'B' — '\u0042', поэтому печать ch1 выдаст 'B'.
Decimal
- Decimal тип имеет большую точность и меньший диапазон по сравнению с типами с плавающей точкой (double и float). Поэтому он подходит для денежных расчётов.
- Размер: 128 бит
- Значение по умолчанию: 0.0M [M в конце обозначает тип decimal]
- Диапазон: (±7.9 × 1028) / (100 до 1028)
Например:
using System;
namespace DataType
{
class DecimalExample
{
public static void Main(string[] args)
{
decimal bankBalance = 53005.25M;
Console.WriteLine(bankBalance);
}
}
}
Вывод:
53005.25
Суффикс M или m должен быть добавлен в конце, иначе значение будет воспринято как double и возникнет ошибка.
C# Литералы
Рассмотрим следующее утверждение:
int number = 41;
Здесь:
int— тип данных- number — переменная
41— литерал
Литералы — фиксированные значения, появляющиеся в программе. Они не требуют вычислений. Например, 5, false, 'w' — литералы, появляющиеся напрямую без вычислений.
Булевы литералы
trueиfalse— доступные булевы литералы.- Используются для инициализации булевых переменных.
Например:
bool isValid = true; bool isPresent = false;
Целочисленные литералы
- Целочисленные литералы используются для инициализации переменных целочисленных типов:
sbyte,short,int,long,byte,ushort,uint,ulong. - Если целочисленный литерал заканчивается на
Lилиl, он типа long. Для лучшей практики используйтеL(неl).long value1 = 4200910L; long value2 = -10928190L;
- Если целочисленный литерал начинается с
0x, он представляет шестнадцатеричное значение. Числа без префиксов считаются десятичными. Восьмеричное и двоичное представление не допускаются в C#.int decimalValue = 25; int hexValue = 0x11c; // десятичное значение 284
Литералы с плавающей точкой
- Литералы с плавающей точкой используются для инициализации переменных типов float и double.
- Если литерал заканчивается суффиксом
fилиF, он типа float. ЕслиdилиD— типа double. Если суффикса нет — по умолчанию double. - Эти литералы содержат e или E в научной нотации.
double number = 24.67; // double по умолчанию float value = -12.29F; double scientificNotation = 6.21e2; // эквивалентно 6.21 × 10² = 621
Символьные и строковые литералы
- Символьные литералы инициализируют переменные типа char.
- Заключены в одинарные кавычки. Например,
'x','p'. - Могут быть представлены как символ, шестнадцатеричная escape-последовательность, unicode или целое, приведённое к char.
char ch1 = 'R'; // символ char ch2 = '\x0072'; // hex char ch3 = '\u0059'; // unicode char ch4 = (char)107; // cast из integer
- Строковые литералы — коллекция символьных литералов.
- Заключены в двойные кавычки. Например, "Hello", "Easy Programming".
string firstName = "Richard"; string lastName = " Feynman";
- C# также поддерживает escape-последовательности:
Символ Значение \'Одинарная кавычка \"Двойная кавычка \\Обратный слэш \nНовая строка \rВозврат каретки \tГоризонтальная табуляция \aЗвуковой сигнал \bBackspace
Язык C
- Освоение переменных, литералов и констант в C++: подробное руководство
- Понимание типов данных C++: основы, модификаторы и лучшие практики
- Переменные, константы и литералы в C: полное руководство
- Типы данных в C: int, float, char и другие — полное руководство
- Классы хранения в C: область видимости, время жизни и производительность
- Освоение типов данных в Python: практическое руководство
- Переменные и литералы в Java: подробное руководство
- Примитивные типы данных в Java: полное руководство с примерами
- Переменные и типы данных в C++: подробное руководство по int, double, char, string, bool
- Типы переменных в Java: локальные, экземпляра и статические