|
Kompyuter tizimlari kafedrasi
|
bet | 34/154 | Sana | 08.01.2024 | Hajmi | 5,29 Mb. | | #131939 |
Bog'liq MajmuaOshkor tur almashtirish
Ayrim hollarda turlarni almashtirish oshkor tarzda amalga oshiriladi. Quyidagi oshkormas tur almashtirish hollarda xatolik yuzaga keladi:
int ni short ga – ma’lumot yo‘qotilishi mumkin
int ni uint ga – ma’lumot yo‘qotilishi mumkin
uint ni int ga – ma’lumot yo‘qotilishi mumkin
float ni int ga – ma’lumot yo‘qotilishi mumkin
ixtiyoriy sonli turni char turiga - ma’lumot yo‘qotilishi mumkin
decimal ni boshqa ixtiyoriy sonli turga –ma’lumot yo‘qotilishi mumkin.
Bunday hollar uchun oshkor tur almashtirish qo‘llaniladi. Tipik sintaksisi quyidagicha:
qabul_qiluvchi =(qabul_qiluvchi_turi) ifoda;
long a; int b; a = 2300;
b = (int)a;
Biror tur boshqasiga o‘tkazilganda, kompilyator ushbu amalni bajarishi lozim.
long a; int b; a = 2300000000; b = (int)a;
Console.WriteLine(b);
Mana shu dastur qismi bajarilganda ekranda -1994967296 soni hosil bo‘ladi. Demak, bu yerdan ko‘rinib turibdiki, turlarni almashtirganda shu tur diapozoniga tushadigan qiymatlarni o‘tkazish zarur, aks holda xatolik yuz beradi. C# tilida checked operatori mavjud bo‘lib, stekning holatini aniqlash mumkin, ya’ni xatolik yuz bergani to‘g‘risida xabar beradi.
long a; int b; a = 2300000; b = checked((int)a);
Turlarni almashtirish xatoliklarni hosil qilishi mumkinligini inobatga olib, xatoliklarni qayta ishlovchi try...catch konstruksiyasidan foydalanish ham mumkin. Masalan:
long a; int b; a = 2300000000;
try
{
b = checked((int)a);
Console.WriteLine(b);
}
catch
{
Console.WriteLine("Turlarni almashtirganda xatolik yuz berdi");
}
Quyidagi misolda suzuvchi nuqtali sonni butun songa almashtirilgan:
double d=10.23; int i;
i = (int)(d + 2.4); //12
Keyingi misolda ishorasiz butun son char turiga o‘tkaziladi:
ushort c = 38; char sym = (char)c;
Console.WriteLine(sym);
Ekranga Unicode kodining 38-kodli & simvoli chiqariladi. Quyidagi misolda decimal qiymat char ga o‘tkazilgan:
decimal x = 105m; char sim = (char) x;
Console.WriteLine(sim);// i harfi hosil bo‘ladi
char C ='i';
decimal d = (decimal) C;
Console.WriteLine(d); // 105 qiymati qaytariladi
Agar hosil qilingan natija, yangi turga o‘tkazilmasa, tur almashtirish baribir amalga oshiriladi. Ammo natija kutilayotgan qiymatni qaytarmaydi. Masalan, int i = -1;
char symbol = (char) i; // ?
Ushbu tur almashtirish amalga oshirilmasligi lozim. Ammo natija sifatida ? simvoli qaytariladi.
Agar son turidagi qiymatni satr turga o‘tkazish lozim bo‘lsa, .NET kutubxonasi sinfining metodlaridan foydalanishi lozim. оbject sinfi ToString() metodiga ega bo‘lib, ushbu amalni bajarish mumkin: int i = 10; string C = i.ToString();
Shuningdek, satr turli qiymatni sonli turga o‘tkazish uchun Parse() metodidan foydalaniladi:
string C = 100; int i = int.Parse(s);
Console.WriteLine(i+50);
Convert sinfi bir turdan ikkinchi turga o‘tkazuvchi metodlardan tashkil topgan bo‘lib ulardan quyidagilarni keltiramiz:
|
| |