Жадвал 3.7.1. C# да асосий типлар (CTS- Common types System)
Объект
|
ўлчамли
|
Тавсифи
|
Object
|
object
|
CTS нинг барча типларининг базавий синфи
|
String
|
string
|
Сатрли тип
|
SByte
|
sbyte
|
8-разрядли ишорали бутун сонлар.
128 ... 127
|
Byte
|
byte
|
8-разрядли ишорасиз бутун сонлар.
0 .. 255
|
Int16
|
int
|
16-разрядли ишорали бутун сонлар.
32 768.. 32 767
|
UInt16
|
uint
|
16-разрядли ишорасиз бутун сонлар.
0 .. 65 535
|
Int32
|
int
|
32-разрядли ишорали бутун сонлар.
2 147 483 648 .. 2 147 483 647
|
UInt32
|
uint
|
32-разрядли ишорасиз бутун сонлар.
0 ..4 294 967 295
|
Int64
|
long
|
64-разрядли ишорали бутун сонлар.
9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807
|
UInt64
|
ulong
|
64-разрядли ишорасиз бутун сонлар.
0 .. 18 446 744 073 709 551 615
|
Decimal
|
decimal
|
128-разрядли ҳақиқий сонлар.
|
Char
|
char
|
16-разрядли белгили тип.
|
Single
|
float
|
32-разрядли ҳақиқий сонлар.
|
Double
|
double
|
64-разрядли ҳақиқий сонлар.
|
Boolean
|
bool
|
Мантиқий типлар (true/false)
|
Бутун типлар.
Жадвал 1.2
Тип
|
Диапазони
|
Формати(разряди)
|
System.SByte
|
-128…127
|
8 бит, ишорали
|
System.Int16
(System.Short)
|
-32768…32767
|
16 бит, ишорали
|
System.Int32
|
-2 147 483 648…2 147 483 647
|
32 бит, ишорали
|
System.Int64
|
-263…263
|
64 бит, ишорали
|
System.Byte
|
0…255
|
8 бит, ишорасиз
|
System.Uint16
(System.Ushort)
|
0…65535
|
16 бит, ишорасиз
|
System.Uint32
(System.Uint)
|
0…4 294 9 67 295
|
32 бит, ишорасиз
|
System.Long
|
-9 223 372 036 854 775 808-
9 223 372 036 854 775 807
|
64 бит, ишорали
|
System.Long
|
0 - 18 446 744 073 709 551 615
|
64 бит, ишорасиз
|
Ҳақиқий типлар
Жадвал 1.3
Тип
|
Диапазони
|
Белгили сонлар хонаси(разряди)
|
Формати
|
System.Single
|
1.5*1045…3.14*1038
|
7-8
|
4 байт
|
System.Double
|
-5.0*10324…1.7*10308
|
15-16
|
8 байт
|
Белгили типлар
Асосий белгили тип: System.Char;
Асосий сатрли тип: System.String;
C# да белгили типларнинг қийматлари битталик қўштирноқ(апостроф) билан, сатрли типларнинг қийматлари иккиталик қўштирноқ билан берилади.
Масалан:
String x=”f”;
Char ch=’f’;
Мантиқий тип
Асосий мантиқий тип: System.Bool;
Қабул қилувчи қийматлари: true, false.
2. Қийматлар билан характерланган типлар.
3. Мурожаат этиш типлари.
6 - маъруза(2-соат)
Ўзгарувчилар ва параметрлар. Ўзгарувчиларнинг категориялари;
Режа:
Ўзгарувчи ва ўзгармаслар.
Операция ва ифодалар
6.1. Ўзгарувчи ва ўзгармаслар
Ўзгарувчилар
Ўзгарувчи - дастур бажарилиши жараёнида ўз қийматини бир ёки бир неча маротаба алмаштириши мумкин бўлган хотиранинг номланган қисми. Ном эса ўзгарувчи белгиланган сўз, ҳарф ёки ҳарф ва белгилар кетма кетлиги бўлиши мумкин. Дастурда фойдаланилувчи барча ўзгарувчилар аниқ эълон қилиниши лозим. Ҳар бир ўзгарувчи эълон қилинаётганда унинг номи ва типи кўрсатилади. Ўзгарувчининг номи унинг қиймати жойлашган хотира қисмига мурожаат қилиш учун хизмат қилади. Тип эса маълумот учун хотирадан қанча жой ажратилиши лозимлигини билдиради.
Ўзгарувчилар қуйидагича эълон қилиниши мумкин:
<ўзгарувчи типи> <ўзгарувчи номи> [= ўзлаштирилувчи қиймат];
Мисоллар:
int a=10, c=12,abc=0;
double b=11.5;
//a=10;
Console.Writeline(a);
bool isEnabled = true;
int x;
double y=3.0;
string hello="Hello World";
char c='s';
int a=4;
int z=a+5;
Ўзгарувчини эълон қилишда бир типли бир нечта ўзгарувчиларни битта тип ёзиб, сўнгра шу типли ўзгарувчиларни кетма-кет “,” билан ажратган холда ёзиш орқали эълон қилиш ҳамда тўғридан-тўғри уларнинг бошланғич қийматини бериб кетиш мумкин, яъни уларни инициализация қилиб олиш мумкин. Ўзгарувчини инициализация қилиш деганда эълон қилинган ўзгарувчига бошланғич қийматни бериш тушунилади. Масалан:
int a, b = 1;
Бу ерда:
a int типидаги ўзгарувчи бўлиб, унинг бошланғич қиймати ўрнатилмаган, яъни инициализация қилинмаган;
b int типидаги ўзгарувчи бўлиб, унинг бошланғич қиймати 1 га тенг;
float x = 0.1, y = 0.1f;
Бу ерда: float типидаги х ва y ўзгарувчиларга бошланғич холда 0.1 қиймат ўзлаштирилмоқда. Фарқи, x ўзгарувчи инициализация қилинаётганда аввал унинг типи double типидаги константа сифатида шакллантирилади сўнгра float типига ўзгартирилади, y ўзгарувчи эса тўғридан тўғри оралиқ ўзгартиришсиз float типи сифатида эълон қилинади ва 0.1 ни ўзлаштириб олади.
Ўзгарувчиларни эълон қилиш жараёнида уларнинг қиймати тўғридан-тўғри ифода билан бериб кетиш мумкин, фақат ифодада иштирок этувчи ўзгарувчилар аввалроқ инициализация қилинган бўлиши лозим, масалан:
int b = 1, a = 100;
int x = b * a + 25;
Баъзи холларда ўзгарувчига null (бўш) қиймат ўзлаштириш лозим бўлади. string типидаги ёки ишорат(ссылка)ли типдаги ўзгарувчилар тўғридан тўғри null қиймат қабул қилади.
Мисол учун: string=null;
Оддий типдаги ўзгарувчилар эса тўғридан-тўғри null қиймат олмайди. Улар бўш қиймат олиши учун типни эълон қилгандан сўнг ? белгиси қўйиш лозим бўлади.
int? i = null;
C# да ўзгарувчиларни ихтиёрий жойда эълон қилиш мумкин.
using System;
class ozgaruvchi
{
public static void Main()
{
int i; //ўзгарувчини эълон қилиш;
i=10; // ўзгарувчига қиймат бериш
Console.WriteLine(i.tostring());// экранга чиқариш
Console.ReadKey(); //бирор тугма босилгунча кутиш
}
}
|
C# да катта ва кичик ҳарфли ўзгарувчи ва ўзгармасларнинг номлари бир-биридан фарқланади. Катта ва кичик ҳарфда ёзилган бир ҳил номли ўзгарувчилар алоҳида-алоҳида ўзгарувчи ва ўзгармаслар сифатида ҳисобланади.
C# да ўзгарувчининг аввалги қийматини бирга ошириш учун кетма-кет жойлашган ++, камайтириш учун кетма-кет жойлашган –- амал белгиларидан фойдаланиш мумкин.
Агар ++(--) ўзгарувчининг ўнг томонида жойлашган бўлса, аввал қиймати 1 га оширилувчи(камайтирилувчи) ўзгарувчининг жорий қиймати бўйича ҳисоблаш ишлари бажарилиб, ундан сўнг унинг қиймати 1 га оширилади(камайтирилади).
int i=1;
int j=i++;
…
Ушбу холда j га аввал 1 ўзлаштирилади. Сўнгра i нинг қиймати бирга оширилади. Яъни, ҳисоблашдан сўнг j=1, i=2 бўлади.
Агар ++(--) ўзгарувчининг чап томонида жойлашса, у холда ўзгарувчининг қиймати ҳисоблашдан аввал 1 га оширилади(камайтирилади),сўнгра ҳисоблаш бажарилади. Масалан:
int i=1;
int j=++i;
...
Ушбу холда i нинг қиймати аввал 1 га оширилади, сўнгра ҳисоблаш натижаси j га узатилади. Яъни, ҳисоблаш натижасида, j=2, i=2 бўлади.
Қуйидаги холатни кўрамиз:
...
int i=1;
Console.WriteLine(“i=”+i++);
...
Ушбу дастур коди бажарилиши натижасида, аввал i нинг жорий қиймати (яъни 1) экранга чиқарилади, сўнгра i нинг қийматига 1 қўшилади.
Агар, ўзгарувчига уни эълон қилиш вақтида тўғридан-тўғри қиймат ўзлаштириш, ҳисоблаш ишлари орқали амалга ошириладиган бўлса, амал бажарилувчи операндлар барчаси, бир хил типга эга бўлиши ҳамда натижа ҳам эълон қилинувчи ўзгарувчи типи диапазонидан чиқиб кетмаслиги лозим. Масалан:
int i=15*10; //тўғри;
byte j=10;
int i=j*50; /* тўғри; чунки, j қабул қилиш мумкин бўлган қийматлар int типи диапазонидан чиқиб кетмайди шу сабабли қабул қилади*/;
int k=15+10.0; //хато. 10.0 бутун сон эмас;
byte b=255*3; //Хато. Натижа byte диапазонидан чиқиб кетади.
C# дастурлаш тилидаги дастур ўзида услуб(усул) ва маълумотларни жамлаган синфлардан ташкил топади. Синф блоки ичида тўғридан тўғри эълон қилинган ўзгарувчи синфнинг майдони дейилади. Синф ичида эса алоҳида блок ичида синфнинг услуб(усул)лари ёзилади. Услуб ичида эълон қилинган ўзгарувчи локал ўзгарувчилар дейилади. Ўзгарувчилардан фойдаланилганда уларнинг фойдаланиш чегараси деган тушунчага эътибор бериш лозим. Ўзгарувчининг фойдаланиш чегараси уни инициализация қилинган жойдан бошлаб, дастурнинг шу қисмини якунловчи блокгача давом этади. Блок – бу фигурали қавслар билан чегараланган дастур кодидир. Блокнинг вазифаси – операторларни гуруҳлашдан иборат. С# да ҳар қандай ўзгарувчи қандайдир блок ичида эълон қилинади, масалан: синф блоки ичида, синф услубининг блоки ичида, услубнинг ичида жойлашган ички услуб ичида ва ҳ. Ўзгарувчининг номи унинг фойдаланиш чегараси ичида, яъни у жойлашган блок ичида уникал бўлиши лозим. Қуйидаги мисолни кўриб ўтайлик:
class X // X номли синфни эълон қилиш
{
int A; // Х синфнинг А номли майдонини эълон қилиш
int B; // Х синфнинг В номли майдонини эълон қилиш
void Y()
{//--Х синфнинг Y номли услуби блоки бошланиши---
int C; // C номли локал ўзгарувчи, унинг фойдаланиш чегарси фақат Y услуби блоки ичида
int A; // А номли локал ўзгарувчи, унинг фойдаланиш чегарси фақат Y услуби блоки ичида ва Х синфнинг юқорида эълон қилинган А майдони билан конфликт бермайди
{ //====== Y услубининг ички блоки бошланиши=========
int D; // D номли локал ўзгарувчи, унинг фойдаланиш чегарси фақат ушбу ички блок ичида
int А; // Бу хато. Чунки Y услуби ичида А номли ўзгарувчидан аввал фойдаланилган!
С = B; // С ўзгарувчига Х синфнинг В майдони қиймати ўзлаштирилмоқда
С = this.A; // С ўзгарувчига Х синфнинг А майдони қиймати ўзлаштирилмоқда
} // ======= Y услубининг ички блоки охири=====
} // Х синфнинг Y номли услуби блоки охири---
} // X синф блоки охири
Ўзгарувчилар дастурда улар эълон қилинган жойда яратилади ва улар жойлашган блок тугашида тозалаб ташланади. Шу блокка қайта мурожаат этилганда ўзгарувчи янгидан яратилади.
ЎЗГАРМАСЛАР.
Ўзгармаслар дастур бажарилиши жараёнида бир марта қиймат берилгандан сўнг қийматини ўзгартириб бўлмайдиган катталиклардир. Ўзгармасларни C# да const калит сўзи билан эълон қилинади.
const double Pi = 3.14;
Агар ўзгармас бутун бошли дастурнинг барча қисмларида фойдаланиш учун рухсат этилган бўлса, public калит сўзи билан қўлланилади.
public const double Pi = 3.14;
Ўзгармасларнинг қиймати ифода кўринишида берилиши ҳам мумкин.
Do'stlaringiz bilan baham: |