C# является строго типизированным языком программирования. Поэтому каждая переменная и константа должна иметь тип. Как и в других языках программирования, в C# есть своя собственная система типов, которая используется при создании переменных.
Тип данных определяет:
- количество памяти, которая необходима для хранения переменной;
- внутреннюю структуру данных;
- минимальное и максимальное значения, которое может принимать переменная;
- методы, поля и события;
- базовый тип;
- место в памяти, где располагается переменная;
- операции которые к нему применяются.
Язык C# использует простые типы данных платформы .Net Framework, при этом в языке, для них, используются псевдонимы, по этому при рассмотрении мы будем указывать как псевдоним, так и полное название типа данных платформы .Net. Для компилятора нет разницы, какую форму записи названий вы используете.
Примитивные типы данных языка C#
bool
Полное название типа: System.Boolean
Используется для объявления переменных, в которых хранятся логические(булевы) значения true или false.
bool isEmpty = true;
System.Boolean isFull = false;
byte
Полное название типа: System.Byte
Целочисленный, беззнаковый тип данных длиной в 1 байт, в котором можно хранить числа из диапазона от 0 до 255.
byte b1 = 21;
System.Byte b2 = 125;
sbyte
Полное название типа: System.SByte
Целочисленный, тип данных со знаком размером в 1 байт, позволяет хранить числа от -128 до 127.
sbyte sb1 = -123;
System.SByte sb2 = 42;
ushort
Полное название типа: System.UInt16
Целочисленный, тип данных без знака, длиной в 2 байта, который может хранить числа из диапазона от 0 до 65 535.
ushort num1 = 324;
System.UInt16 num2 = 1024;
short
Полное название типа: System.Int16
Числовой, тип данных со знаком, размером в 2 байта, в котором можно хранить целые числа из диапазона от -32 768 до 32 767.
short sNum1 = -1995;
System.Int16 sNum2 = 2048;
uint
Полное название типа: System.UInt32
Целочисленный, тип данных без знака, имеет размер - 4 байта, в котором можно хранить число из диапазона от 0 до 4 294 967 295.
uint uiNum1 = 777;
System.UInt32 uiNum2 = 11231;
int
Полное название типа: System.Int32
Целочисленный, знаковый тип данных, занимает 4 байта, в котором можно расположить число от -2 147 483 648 до 2 147 483 647.
int iNum1 = -34531;
System.Int32 iNum2 = 56874;
ulong
Полное название типа: System.UInt64
Целочисленный, беззнаковый, длиной в 8 байт, в котором хранят числа от 0 до 18 446 744 073 709 551 615.
ulong ulNum1 = 7878;
System.UInt64 ulNum2 = 78444514;
long
Полное название типа: System.Int64
Целочисленный, знаковый тип данных, длиной в 8 байт, в котором можно хранить число из диапазона -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
long lNum1 = -12897;
System.Int64 lNum2 = 56554;
float
Полное название типа: System.Single
Знаковый тип данных, размером 4 байта для хранения вещественных чисел от ±1.5 ⋅ 10−45 до ±3.4 ⋅ 1038
float fNum1 = -3.146;
System.Single fNum2 = 12e3;
double
Полное название типа: System.Double
Знаковый тип данных, занимает 8 байт, хранения чисел с плавающей точкой ±5 ⋅ 10−324 до ±1.7 ⋅ 10308
double dNum1 = -22.12;
System.Double dNum2 = 1.329e34;
decimal
Полное название типа: System.Decimal
Знаковый тип данных, занимает 16 байт, для хранения вещественных чисел в диапазоне от ±1 ⋅ 10−28 до ±7.9228 ⋅ 1028
decimal decNum1 = -12.23;
System.Decimal decNum2 = 1.312e4;
В отличие от других вещественных типов данных, диапазон decimal уже, при большей точности. Благодаря этому, он идеально подходит для финансовых операций.
C# позволяет получить минимальное и максимальное значения, которое может принимать указанный тип. Минимальное значение хранится в поле – MinValue, а максимальное в – MaxValue.
Console.WriteLine(ulong.MinValue);
Console.WriteLine(byte.MaxValue);
Кроме перечисленных диапазонов значений, типы с плавающей точкой float и double, могут принимать следующие:
- отрицательный и положительный ноль;
- отрицательную(NegativeInfinity) и положительную(PositiveInfinity) бесконечность;
- не числовое значение NaN (Not a Number)
char
Полное название типа: System.Char
Используется для объявления переменной, которая представляет собой один Unicode символ, занимает 2 байта в памяти.
char c1 = 'm';
char c2 = '\u263A';
System.Char tab = '\t';
string
Полное название типа: System.String
Может содержать в себе последовательность, от 0 и больше, символов Unicode формата.
string s1 = 'Hi!';
System.String s2 = 'Smile \u263A';
object
Полное название типа: System.Object
Этот тип данных является базовым(все другие от него наследуются) для всех других типов платформи .Net. Может хранить в себе значение любого другого типа данных.
object o1 = 564;
System.Object o2 = "Hello";
Неявная типизация
Неявная или утиная типизация (duck typing) – типизация, при которой переменная остается строго типизированной, а её тип определяется компилятором, исходя из присваиваемого значения.
Название утиная типизация происходит от “утиного теста”:
«Если оно выглядит, плавает и крякает как утка, то наверное это и есть утка»
В версии C# 3.0 появилась возможность, неявно типизировать данные. Это позволило упростить написание и анализ кода программ, поскольку часто у классов очень длинные названия.
Для неявной типизации, вместо типа данных, указывают ключевое слово var.
Следующие две строки эквивалентны:
int i = 256;
var i = 256;
Для неявной типизации характерны две особенности:
- переменную необходимо инициализировать сразу после объявления;
- нельзя инициализировать переменную null-литералом(поскольку null не имеет явного типа).
Компилятор автоматически ставит тип данных int – для целых чисел, и double – для вещественных.
Использование литеральных суффиксов
При использовании неявной типизации, или перегруженных методов, которые могут принимать значения разных типов данных, время от вермени, появляется необходимость указать тип данных литерала. Для этого в C# используются литеральные суффиксы.
Тип | Суффикс | Пример использования використання |
---|---|---|
uint | U | 123U |
ulong | UL | 11UL |
long | L | 222L |
float | F | 2.2F |
double | D | 2.3D |
decimal | M | 1.2M |
Регистр написания суффиксов не важен.