Берилгендердин типтери
Көптөгөн программалоо тилдери сыяктуу эле, C# өзгөрмөлөрдү түзүү үчүн колдонулган берилгендер типтеринин(типы данных) системасы бар. Берилгендердин тиби маалыматтардын ички көрүнүшүн, объект кабыл ала турган көптөгөн маанилерди, ошондой эле объектте колдонула турган жарактуу аракеттерди аныктайт.
C# тилинде негизги берилгендердин типтеринин төмөнкүдөй түрлөрү бар:
- Bool: true жана false маанилерин сактайт. System.Boolean системдик типте көрсөтүлгөн.
@A@bool alive = true;
bool isDead = false;@A@
- byte: 0дөн 255ке чейин бүтүн санды сактайт жана 1 байтты ээлейт. System.Byte системдик типте көрсөтүлгөн.
@A@byte bit1 = 1;
byte bit2 = 102;@A@
- sbyte: - 128ден 127ге чейин бүтүн санды сактайт жана 1 байтты ээлейт. System.SByte системдик типте көрсөтүлгөн.
@A@sbyte bit1 = -101;
sbyte bit2 = 102;@A@
- short: -32768ден 32767 ге чейин бүтүн санды сактайт жана 2 байтты ээлейт. System.Int16 системдик типте көрсөтүлгөн.
@A@short n1 = 1;
short n2 = 102;@A@
- unshort: 0дөн 65535 ге чейин бүтүн санды сактайт жана 2 байтты ээлейт. System.UInt16 системдик типте көрсөтүлгөн.
@A@unshort n1 = 1;
unshort n2 = 102;@A@
- int: -2147483648ден 2147483647ге чейин бүтүн санды сактайт жана 4 байтты ээлейт. System.Int32 системдик типте көрсөтүлгөн. Бардык бүтүн литералдар демейки боюнча(по умолчанию) int тибинин маанилерин билдирет.
@A@int a = 10;
int b = 0b101; // бинарная форма b =5
int c = 0xFF; // шестнадцатеричная форма c = 255@A@
- uint: 0дөн 4294967295 ге чейин бүтүн санды сактайт жана 4 байтты ээлейт. System.UInt32 системдик типте көрсөтүлгөн.
@A@uint a = 10;
uint b = 0b101;
uint c = 0xFF;@A@
- long: -9 223 372 036 854 775 808ден 9 223 372 036 854 775 807ге чейин бүтүн санды сактайт жана 8 байтты ээлейт. System.Int64 системдик типте көрсөтүлгөн.
@A@long a = -10;
long b = 0b101;
long c = 0xFF;@A@
- ulong: 0дөн 18 446 744 073 709 551 615ке чейинки бүтүн санды сактайт жана 8 байтты ээлейт. System.Uint64 системдик типте көрсөтүлгөн.
@A@ulong a = 10;
ulong b = 0b101;
ulong c = 0xFF;@A@
- float: -3.4*1038ден 3.4*1038ге чейин өзгөрүлмө чекиттин санын сактайт жана 4 байтты ээлейт. System.Single системдик типте көрсөтүлгөн.
- double: 5.0*10-324 төн 1.7*10308 чейин сүзүүчү чекит санын сактайт жана 8 байтты ээлейт. System.Double системдик типте көрсөтүлгөн.
- decimal: ондук бөлчөк санды сактайт. Эгерде ондук үтүрсүз колдонулса, ал 1.0*10-28 дан 7.9228*1028 ге чейинки мааниге ээ, үтүрдөн кийинки 28 белгини сактай алат жана 16 байт ээлейт. System.Decimal системдик типте көрсөтүлгөн.
- char: жалгыз белгини коддоодо сактайт жана 2 байтты ээлейт. System.Char системдик типте көрсөтүлгөн.Символдук литералдар ушул түргө туура келет:
@A@char a = 'A';
char b = '\x5A';
char c = '\u0420';@A@
- string: символдордун топтомун сактайт. System.String системдик типте көрсөтүлгөн. Сап литералдары ушул түргө туура келет:
@A@string hello = "Hello";
string word = "world";@A@
- object: каалаган маалымат түрүнүн маанисин сактай алат жана 4 биттик платформада 32 байт жана 8 байт 64 биттик платформада ээлейт. System.Object системдик типте көрсөтүлгөн. .NET башка бардык түрлөрү жана класстары үчүн негизги болуп саналат.
@A@object a = 22;
object b = 3.14;
object c = "hello code";@A@
Мисалы, ар кандай типтеги бир нече өзгөрмөлөрдү аныктап, алардын маанилерин консолго чыгаралы:
@A@using System;
class HelloWorld {
static void Main() {
string name = "Перизат";
int age = 20;
bool isEmployed = true;
double weight = 45;
Console.WriteLine($"Аты: {name}");
Console.WriteLine($"Жашы: {age}");
Console.WriteLine($"Салмагы: {weight}");
Console.WriteLine($"Иштейби: {isEmployed}");
}
}@A@
Консолго маалыматтарды чыгаруу үчүн бул жерде интерполяция колдонулат: саптын алдында $ белгиси коюлат жана андан кийин биз өзгөрмөлөрдүн маанилерин тармал кашаага киргизе алабыз. Консоль программасынын чыгышы:
@T@Аты: Перизат
Жашы: 20
Салмагы: 45
Иштейби: True@T@
Суффикстерди колдонуу
Маанилерди ыйгарууда төмөнкү назиктикти эске алуу керек: бардык чыныгы литералдар (бөлчөк сандар) double түрүндөгү маанилер катары каралат. Жана бөлчөк саны float тибин же decimal тибин көрсөтүү үчүн, литералга суффикстерди: F/f - үчүн float жана M/m - үчүн decimal кошуу керек.
@A@float a = 3.14F;
float b = 30.6f;@A@
@A@decimal c = 1005.8M;
decimal d = 334.8m;@A@
Ошо сыяктуу эле, бардык бүтүн литералдар int түрүндөгү маанилер катары каралат. Бүтүн сандын литералы int маанисин туюндурарын ачык көрсөтүү үчүн U/u суффикси, узун түрү үчүн L/l суффикс жана ulong түрү үчүн UL/ul суффикс колдонуңуз:
@A@uint a = 10U;
long b = 20L;
ulong c = 30UL;@A@
Системанын типтерин колдонуу
Жогоруда, ар бири үчүн бардык негизги маалымат түрлөрүн тизмектегенде, системанын тиби айтылган. Анткени камтылган типтин аталышы негизинен системанын тибинин стенографиясы. Мисалы, төмөнкү өзгөрмөлөр тиби боюнча эквиваленттүү болот:
@A@int a = 4;
System.Int32 b = 4;@A@
Толук терүү(неявная типизация)
Мурда биз өзгөрмөлөрдүн түрүн ачык көрсөткөнбүз, мисалы, int x;. Жана компилятор x бүтүн санды сактай турганын баштаганда эле билген.
Бирок, биз ошондой эле жашыруун терүү моделин колдоно алабыз:
@A@var hello = "Hell to World";
var c = 20;@A@
Жашыруун терүү үчүн маалымат тибинин аталышынын ордуна var ачкыч сөзү колдонулат. Андан кийин, компиляция учурунда, компилятор өзү дайындалган мааниге негизделген маалымат тибин чыгарат. Демейки боюнча(по умолчанию), бардык бүтүн маанилер int тибинде деп эсептелгендиктен, c өзгөрмөсү int тибине кирет. Ошо сыяктуу эле, hello өзгөрмөсүнө сап ыйгарылган, андыктан бул өзгөрмө сап тибинде болот
Бул өзгөрмөлөр кадимки өзгөрмөлөргө окшош, бирок алардын айрым чектөөлөрү бар.
Биринчиден, биз адегенде кыйыр түрдө терилген өзгөрмөнү жарыялап, анан аны инициализациялай албайбыз:
// бул код иштейт
@A@int a;
a = 20;@A@
// бул код иштебейт
@E@var c;
c= 20;@E@
Экинчиден, биз кыйыр түрдө терилген өзгөрмөнүн мааниси катары null көрсөтө албайбыз:
// бул код иштебейт
@E@Evar c=null;@E@
Маани нөл болгондуктан, компилятор маалымат түрүн чыгара албайт.