Delegatlar

Nodirbek Abdulaxadov

Agar funksiyani parametr sifatida uzatishni xohlasak nima bo'ladi? Qanday qilib C# callback funksiyalari yoki eventlarni boshqaradi?

Javob: Delegat

Delegat - bu metod imzosini belgilaydigan ma'lumot turi. Siz boshqa ma'lumotlar turi kabi delegatning o'zgaruvchilarini yaratishingiz mumkin va ular yordamida delegat bilan bir xil parametrga ega har qanday metodga murojaat qilishingiz mumkin.

Delegatlar bilan ishlashda uchta bosqich mavjud:

  1. Delegatni e'lon qilish

  2. Kerakli metodni o'rnatish

  3. Delegatni chaqirish

Delegat quyida ko'rsatilgandek , delegate kalit so'zdan keyin funksiya imzosi yordamida e'lon qilinishi mumkin:

[ruxsat modifikatori] delegate [qaytariluvchi tip] [delegat nomi]([parameterlar])

Quyida MyDelegate deb nomlangan delegat e'lon qilingan:

public delegate void MyDelegate(string msg);

Yuqorida biz void tipidagi va string parametrli MyDelegate delegatini e'lon qildik. Delegat sinfdan tashqarida yoki sinf ichida e'lon qilinishi mumkin. Quyidagi misolda sinfdan tashqarida e'lon qilamiz.

using System;
namespace Delegate
{
    class Program
    {
        // delegat e'lon qilish
        public delegate void MyDelegate(string msg); 

        public static void Main(string[] args)
        {
            // delegat obyektiga metod tayinlash
            MyDelegate del1 = new MyDelegate(MethodA);

            // delegat obyektiga metod tayinlash
            MyDelegate del2 = MethodA;

            //lambda ifodadan foydalanish
            MyDelegate del3 = (string msg) => Console.WriteLine(msg);

            Console.ReadKey();
        }

        //metodni e'lon qilish
        static void MethodA(string message)
        {
            Console.WriteLine(message);
        }
    }
}

Kerakli metodni o'rnatgandan so'ng, Invoke() metodi yordamida yoki () operator yordamida delegat chaqirilishi mumkin.

Quyida delegat qo'llanishining to'liq namunasi keltirilgan:

Natija:

Quyidagi rasm delegatni tasvirlaydi:

Delegatni Parametr sifatida uzatish

Metod quyida ko'rsatilgandek, Delegat turi parametriga ega bo'lishi mumkin:

Ko'p tarmoqli(Multicast) delegat

Delegat bir nechta metodlarni ko'rsatishi mumkin. Bir nechta metodni ko'rsatadigan delegat ko'p tarmoqli(Multicast) delegat deb ataladi. "+" yoki "+ =" operatori chaqiruvlar ro'yxatiga funksiyani qo'shadi va "-" yoki "-=" operatorlari uni o'chirib tashlaydi.

Natija:

Agar delegat qiymatni qaytaradigan bo'lsa, unda ko'p sonli delegat chaqirilganda oxirgi tayinlangan maqsad metodining qiymati qaytariladi.

Umumiy delegat

Umumiy delegatni delegat bilan bir xil tarzda aniqlash mumkin, lekin umumiy turdagi parametrlardan yoki qaytish turidan foydalangan holda. Maqsadli metodni o'rnatganingizda umumiy tur ko'rsatilishi kerak.

Masalan, int va string parametrlari uchun ishlatiladigan quyidagi umumiy delegatni ko'rib chiqamiz:

Natija:

Last updated

Was this helpful?