Kompyuter tizimlari kafedrasi




Download 5,29 Mb.
bet30/154
Sana08.01.2024
Hajmi5,29 Mb.
#131939
1   ...   26   27   28   29   30   31   32   33   ...   154
Bog'liq
Majmua

Ошкор тип алмаштириш
Айрим ҳолларда типларни алмаштириш ошкор тарзда амалга оширилади. Қуйидаги ошкормас тип алмаштириш ҳолларда хатолик юзага келади:

  • int ни short га – маълумот йўқотилиши мумкин

  • int ни uint га – маълумот йўқотилиши мумкин

  • uint ни int га – маълумот йўқотилиши мумкин

  • float ни int га – маълумот йўқотилиши мумкин

  • ихтиёрий сонли типни char типига - маълумот йўқотилиши мумкин

  • decimal ни бошқа ихтиёрий сонли типга – ўнли тип бошқача ташкил қилинганлиги боис, маълумот йўқотилиши мумкин.

Бундай ҳоллар учун ошкор тип алмаштириш қўлланилади. Типик синтаксиси қуйидагича:


қабул_қилувчи =(қабул_қилувчи_типи) ифода;

long a;
int b;


a = 2300;
b = (int)a;

Бирор тип бошқасига ўтказилганда, компилятор ушбу амални бажариши лозим.


long a;
int b;
a = 2300000000;
b = (int)a;
Console.WriteLine(b);

Мана шу дастур қисми бажарилганда экранда -1994967296 сони ҳосил бўлади. Демак бу ердан кўриниб турибдики типларни алмаштирганда шу тип диапозонига тушадиган қийматларни ўтказиш зарур акс ҳолда хатолик юз беради. C# тилида checked оператори мавжуд бўлиб, стекнинг ҳолатини аниқлаш мумкин яъни хатолик юз бергани тўғрисида хабар беради.


long a;
int b;
a = 2300000;
b = checked((int)a);

Типларни алмаштириш хатоликларни ҳосил қилиши мумкинлигини инобатга олиб, хатоликларни қайта ишловчи try...catch конструкциясидан фойдаланиш ҳам мумкин. Масалан:


long a;
int b;


a = 2300000000;
try {
b = checked((int)a);
Console.WriteLine(b);
}
catch {
Console.WriteLine("Типларни алмаштирганда хатолик юз берди");
}
Қуйидаги мисолда сузувчи нуқтали типни бутун сон типига алмаштириляпти:
double d=10.23;
int i;
i = (int)(d + 2.4);

Кейинги мисолда ишорасиз бутун сон char типига ўтказилади:


ushort c = 38;
char sym = (char)c;
Console.WriteLine(sym);

Экранга ASCII кодининг 38-кодли & символи чиқарилади. Қуйидаги мисолда decimal қиймат char га ўтказилган:


decimal x = 105m;
char sim = (char) x;
Console.WriteLine(sim);// i ҳарфи ҳосил бўлади
char s = 'i';
decimal d = (decimal) s;
Console.WriteLine(d);// 105 қиймати қайтарилади
Агар ҳосил қилинган натижа, янги типга ўтказилмаса, тип алмаштириш барибир амалга оширилади. Аммо натижа кутилаётган қийматни қайтармайди. Масалан,
int i = -1;
char symbol = (char) i;

Ушбу тип алмаштириш амалга оширилмаслиги лозим. Аммо натижа сифатида ? символи қайтарилади.
Агар сонли типли қийматни ҳарфий типга ўтказиш лозим бўлса, .NET библиотекаси класслари методларидан фойдаланиш лозим. оbject класси ToString() методига эга бўлиб, ушбу амални бажариш мумкин:
int i = 10;
string s = i.ToString();

Шунингдек, ҳарфий типли қийматни сонли типга ўтказиш учун Parse() методидан фойдаланилади:


string s = 100;
int i = int.Parse(s);
Console.WriteLine(i+50);
Converter класси бир типдан иккинчи типга ўтказувчи методлардан ташкил топган бўлиб улардан қуйидагиларни келтирамиз:




Download 5,29 Mb.
1   ...   26   27   28   29   30   31   32   33   ...   154




Download 5,29 Mb.