Типы данных

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

Регистр написания суффиксов не важен.

Смотрите также: