Ma’ruza 07 (33)
Mavzu: Delegatlar. Lyamda ifodalar.
Delegatlar. Umumlashgan delegatlar. Func va Action delegatlari. Anonim metodlar. Lyamda ifodalar. Lyamda parametrlar turlari. Bir nechta parametrli va parametrsiz lyamda ifodalar.
Reja:
Delegat tushunchasi, e’loni
Oddiy delegatga misol
Murakkabroq misol
Delegat tushunchasi
Biz shu paytga qadar ko’rib chiqqan ilovalarning ko’pchiligida u yoki bu usulda berilgan ob’yektga so’rov yuboruvchi kod bo’laklari Main() metodiga qo’shib borilgan edi. Lekin ko’pchilik ilovalar ob’yektning o’zini yaratgan mohiyatga teskari murojaat qila olish imkoni bor bo’lishligini talab qiladi.
.NET Framework da teskari chaqiruvlar delegatlardan foydalangan holda toifalarga nisbatan havfsiz bo’lgan ob’yektga yo’naltrilgan usulda amalga oshiriladi. Mohiyatan, delegate – toifalarga nisbatan havfsiz ob’yekt bo’lib, ilovaning ancha kechroq chaqirilishi mumkin bo’lgan boshqa metodi yoki metodlar ro’yhatiga ishora qiladi. Xususan, delegate uchta muhim axborot qismlarini qo’llab quvvatlaydi:
u (ya’ni delegate) chaqiruvlar qiladigan metodning manzili;
chaqirilayotgan metodning argumentlari (agar bor bo’lsa);
chaqirilayotgan metod qaytaradigan qiymat (agar bor bo’lsa).
Izoh. .NETda delegatlar yo statik metodlarga, yo nusxaning metodalriga ishora qilishi mumkin.
Delegat yaratilgach va zarur axborot bilan ta’minlangach, ijro paytida u o’zi ishora qilayotgan metod yoki metodlarni dinamik chaqirishi mumkin. .NET Framework da har bir delegat (shu jumladan sizning maxsus delegatlaringiz ham) avtomatik tarzda o’z metodlarini sinxron yoki asinxron chaqirish qobiliyatiga ega bo’ladi. Bu holat dasturlash masalalarini jiddiy soddalashtirib yuboradi, chunki Thread ob’yektini qo’lda yaratmay va boshqarmay metodni ikkilamchi ijro oqimida chaqirish mumkin.
Delegat toifasini ta’riflash uchun C# tilida delegate kalit so’zidan foydalaniladi. Delegat toifasining nomi ixtiyoriy bo’lishi mumkin. Biroq ta’riflanayotgan delegatning signaturasi u ishora qiladigan metod yoki metodlar signaturasi bilan ustma ust tushishi kerak, ya’ni bir xil bo’lishi lozim. Masalan, quyida keltrilgan delegat toifasi (BinaryOp nomli) butun son qaytaruvchi va kirish parametrlari sifatida ikkita butun sonni qabul qiluvchi ixtiyoriy metodga ishora qilishi mumkin (siz keyinroq mustaqil ravishda shunday delegat qurasiz, hozircha u qisqa shaklda ko’rsatilgan):
// Bu delegat 2 ta butun qiymat qabul qiluvchi va butun qiymat
// qaytaruvchi istalgan metodga ishora qilishi mumkin
Do'stlaringiz bilan baham: |