Interfeys toifalari tushunchasi Interfeys toifalarni abstract bazaviy sinflar bilan taqqoslash Maxsus interfeyslarni kiritish


Download 0.77 Mb.
bet35/50
Sana26.01.2023
Hajmi0.77 Mb.
#1129439
1   ...   31   32   33   34   35   36   37   38   ...   50
Bog'liq
MAVZULAR UMUMIY

Ma’ruza 08 (34)
Mavzu: Hodisalar
event kalit so’zi. Hodisalar. Hodisalar standart qolipi. Hodisalarni boshqarish.
Reja:

  1. Hodisalar. event kalit so’zi

  2. Kirib kelayotgan hodisalarni eshitish


Hodisalar. event kalit so’zi

Delegatlar hotiradagi ob’yektlarga o’zaro ikkitomonlama ta’sirlashish imkonini bergani uchun anchayin qiziqarli tuzilmalardir, albatta. Shunga qaramay, to’g’ridan to’g’ri delegatlar bilan ishlash stereotip kodning yozilishiga olib kelishi mumkin (delegatni e’lon qilish, zarur a’zo-o’zgaruvchilarni kiritish, inkapsulyatsiyani saqlash uchun ro’yhatga olish va ro’yhatdan chiqarish maxsus metodlarini yozish va h.k.).
Delegat chaqiruvlari ro’yhatiga metodlarni qo’shish va o’chirish uchun maxsus metodlarni yaratish zaruratidan xalos etuvchi qisqartirish sifatida C# tilida event kalit so’zi taqdim qilinadi. Bu so’z o’zbek tilida “hodisa” degan ma’noni bildiradi. event kalit so’zini kompilyator tomonidan talqin etilishi (tarjima qilinishi) natijasida siz avtomatik ravishda ro’yhatga olish va bekor qilish metodlariga, shuningdek, delegatlarning toifalari uchun barcha zarur o’zgaruvchi a’zolarga ega bo’lasiz. Delegat toifali bunday o’zgaruvchi-a’zolar hamisha yopiq (private) a’zo sifatida e’lon qilingan bo’ladi va shu bois hodisani yaratayotgan ob’yektdan to’g’ridan-to’g’ri ularga murojaat qilib bo’lmaydi. Natijada event kalit so’zi maxsus sinf tomonidan tashqi ob’yektlarga xabarlar yuborishni soddalashtirishda ishlatilishi mumkin.
Hodisani ta’riflash (yoki aniqlash, kiritish) ikki bosqichli jarayondir. Birinchidan, hodisa ro’y berganida chaqiriladigan metodlar ro’yhatini saqlaydigan delegat toifasini kiritishga (yoki bor toifani ishlatishga) to’g’ri keladi. Ikkinchidan, delegat toifasiga oid atamalar bilan hodisani (event kalit so’zini qo’llab) e’lon qilish zarur. Shu event kalit so’zini ishlatishni namoyish qilish uchun HodisalarBilanIshlashdeb atalgan konsol dasturi (ilovasi) ni yarataylik. Undagi AvtoToifasi sinfida ikkita AvtoIshdanChiqdi va AvtoHavfYoqasida hodisalari aniqlangan bo’lib, ular MotorHolati degan yagona delegat toifasiga mos qo’yilgandir. AvtoToifasi sinfi quyida keltirilgan:
public class AvtoToifasi
{// Holat ma'lumotlari,
public int JoriyTezlik { get; set; }
public int MaxTezlik { get; set; } = 100;
public string AvtoNomi { get; set; }
// Avtomobil sozmi?
private bool ishdanChiqdi;
// Sinf konstruktorlari
public AvtoToifasi() { }
public AvtoToifasi(string nomi, int maxTz, int jorTz)
{ JoriyTezlik = jorTz; MaxTezlik = maxTz; AvtoNomi = nomi; }
// Delegat toifasini aniqlash
public delegate void MotorHolati(string chaqiruvchiUchunXabar);
// AvtoToifasi sinfi ushbu hodisalarni yubora oladi
public event MotorHolati AvtoIshdanChiqdi;// avto ishdan chiqdi
public event MotorHolati AvtoHavfYoqasida;// ishdan chiqish arafasida
// Hodisalarni vujudga keltiruvchi Tezlanish () metodini yozish
public void Tezlanish(int delta)
{ // Agar avtomobil ishdan chiqqan bo'lsa, bu haqda xabar yuborish
if (ishdanChiqdi)
{
AvtoIshdanChiqdi?.Invoke("Uzr, avto ishdan chiqdi...");
}
else
{ JoriyTezlik += delta;
// Avtomobil deyarli ishdan chiqdimi?
if (10 == (MaxTezlik - JoriyTezlik))
AvtoHavfYoqasida?.Invoke("Ehtiyot bo'l shovvoz! Xatar yoqasidasan!");
if (JoriyTezlik >= MaxTezlik)
ishdanChiqdi = true;
else
Console.WriteLine("Joriy Tezlik = {0}", JoriyTezlik);
}
}
}
Shunday qilib AvtoToifasi sinfi ikkita maxsus hodisani (AvtoIshdanChiqdi va AvtoHavfYoqasida hodisalarini) yubora oladigan qilib yozildi. Hodisalarni yuboradigan sinfni qanday qurishni o’rgandik, endi keyingi masala chaqiruvchi kod tomonidan qabul qilinayotgan (kirib kelayotgan) hodisalar payqalishi (eshitilishi) qanday qilib amalga oshishini ko’rib chiqamiz.

Download 0.77 Mb.

Do'stlaringiz bilan baham:
1   ...   31   32   33   34   35   36   37   38   ...   50




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