C# Kortejlar C# kartejlarni e’lon qilish


Download 260.19 Kb.
bet4/28
Sana18.06.2023
Hajmi260.19 Kb.
#1574109
1   2   3   4   5   6   7   8   9   ...   28
Bog'liq
dasturlash tyorya 8 shrift

Dinamik strukturalar:Bеrilganlar ustida ishlashda ularning miqdori qancha bo’lishi va ularga xotiradan qancha joy ajratish kеrakligi oldindan noma'lum bo’lishi mumkin. Programma ishlash paytida bеrilganlar uchun zarurat bo’yicha xotiradan joy ajratish va ularni ko’rsatkichlar bilan bog’lash orqali yagona struktura hosil qilish jarayoni xotiraning dinamik taqsimoti dеyiladi. Bu usulda hosil bo’lgan bеrilganlar majmuasiga bеril-ganlarning dinamik strukturasi dеyiladi, chunki ularning o’lchami programma bajarilishida o’zgarib turadi. Programmalashda dinamik strukturalardan chiziqli ro’yxatlar (zanjirlar), styoklar, navbatlar va binar daraxtlar nisbatan ko’p ishlatiladi. Ular bir -biridan elеmеntlar o’rtasidagi bog’lanishlari va ular ustida bajariladigan amallari bilan farqlanadi. Programma ishlashida strukturaga yangi elеmеntlar qo’shilishi yoki o’chirilishi mumkin.
Ushbu innovatsiyaning ahamiyatini tushunish uchun statik va dinamik tarzda yozilgan tillar o'rtasidagi farqni bilish kerak. Statik tiplashli tillarda barcha turlarni va ularning a'zolarini - xossalari va usullarini aniqlash kompilyatsiya bosqichida sodir bo'ladi. Dinamik tillarda esa tizim bajarilgunga qadar turlarning xossalari va usullari haqida hech narsa bilmaydi.

Ushbu muhit yordamida C# DLR a'zolari ish vaqtida topiladigan dinamik ob'ektlarni yaratishi va ularni an'anaviy statik terilgan ob'ektlar bilan birga ishlatishi mumkin.


C# da DLR dan foydalanishning kaliti bu dinamik turlardan foydalanishdir . Ushbu kalit so'z kompilyatsiya vaqtida turdagi tekshiruvni o'tkazib yuborishga imkon beradi. Bundan tashqari, dinamik deb e'lon qilingan ob'ektlar dastur davomida o'z turini o'zgartirishi mumkin. Masalan:


dynamic obj = 3; // здесь obj - целочисленное int
Console.WriteLine(obj);// 3
obj = "Hello world";// obj - строка
Console.WriteLine(obj); // Hello world
obj = new Person("Tom", 37); // obj – объект
Person
Console.WriteLine(obj); // Person { Name = Tom, Age = 37 }record class Person(string Name, int Age);
X o'zgaruvchisi qiymat turini bir necha marta o'zgartirsa ham, bu kod yaxshi ishlaydi. Bu erda dinamik turlardan foydalanish var kalit so'zidan foydalanishdan farq qiladi . Kalit so'zi bilan e'lon qilingan o'zgaruvchi varuchun tur kompilyatsiya vaqtida aniqlanadi va keyin ish vaqtida yana o'zgartirilmaydi.
Bundan tashqari, foydalanish dynamicva ob'ekt turi o'rtasida umumiy asoslarni topishingiz mumkin. Agar oldingi misolda dinamikni obyekt: bilan almashtirsak object x = 3;, natija bir xil bo'ladi. Biroq, bu erda ham farqlar mavjud.
object obj = 24;
dynamic dyn = 24;
obj += 4; // так нельзя
dyn += 4; // а так можно
Biz satrda xatolikni ko'ramiz obj += 4;, chunki += operatsiyasini ob'ekt va int turlariga qo'llash mumkin emas. Dinamik deb e'lon qilingan o'zgaruvchi bilan bu o'tadi, chunki uning turi faqat ish vaqtida ma'lum bo'ladi.
Dinamikdan foydalanishning yana bir ajralib turadigan xususiyati shundaki, bu kalit so'z nafaqat o'zgaruvchilarga, balki xususiyatlar va usullarga ham tegishli. Masalan:
class Person
{
public string Name { get;}
public dynamic Age { get; set; }
public Person(string name, dynamic age)
{Name = name; Age = age;}// выводим зарплату в зависимости от переданного формата
public dynamic GetSalary(dynamic value, string format){if (format == "string") return $"{value} euro";else if (format == "int") return value; else return 0.0;} public override string ToString() => $"Name: {Name}Age: {Age}";}Person klassi dinamik Age xususiyatini belgilaydi, shuning uchun bu xususiyatga qiymat o'rnatishda biz ikkalasini ham yozishimiz person.Age=22mumkin person.Age="twenty-two". Ikkala variant ham amal qiladi. Va konstruktordagi yosh parametri orqali ushbu xususiyatga istalgan qiymat o'tkazilishi mumkin.

GetSalaryDinamik qiymatni qaytaradigan usul ham mavjud . Misol uchun, parametrga qarab, biz daromad miqdorining satrli ko'rinishini yoki raqamni qaytarishimiz mumkin. Bundan tashqari, usul parametr sifatida dinamikni oladi. Shunday qilib, biz daromad qiymati sifatida ham butun sonni, ham kasr sonini yoki qatorni o'tkazishimiz mumkin. Keling, maxsus dasturni ko'rib chiqaylik:


dynamic tom = new Person("Tom", 22);
Console.WriteLine(tom);
Console.WriteLine(tom.GetSalary(28, "int"));

Download 260.19 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   28




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling