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 |
Регістр написання суфіксів не важливий.