Sobes.tech
Junior

C# da delegat nima?

sobes.tech AI

AIdan javob

Delegat — bu delegate kalit soʻz yordamida eʼlon qilingan havola turidir. U belgilangan imzoga (qaytish turi va parametrlar turlari) ega metodni inkapsulyatsiya qiladi. Aslida, delegat — bu metodga xavfsiz ko‘rsatkich.

Delegatlarning asosiy xususiyatlari:

  • Metodlarni inkapsulyatsiya qilish: Delegat u qaratgan metod haqida maʼlumot saqlaydi.
  • Turlar xavfsizligi: Delegat faqat imzosi to‘g‘ri keladigan metodlarga murojaat qilishi mumkin.
  • Multicast: Delegatlar bir vaqtning o‘zida bir nechta metodga murojaat qilishi mumkin. Delegat chaqirilganda, unga bog‘langan barcha metodlar ularning qo‘shilgan tartibida chaqiriladi.

Eʼlon qilish va foydalanish misoli:

// Delegat eʼlon qilish
public delegate int MyDelegate(int x, int y);

// Delegat imzosiga mos metod
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Delegatni ishlatish
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Delegat nusxasini yaratish va Add metodiga bog‘lash
        MyDelegate del = new MyDelegate(calc.Add);

        // Delegat yordamida metodni chaqirish
        int result = del(5, 3);
        System.Console.WriteLine(result); // Chiqish: 8
    }
}

.NET Framework 3.5 va LINQ bilan birga, ichki umumiy delegatlar keng tarqaldi:

  • Action<T1, ..., Tn>: Qaytarmaydigan delegat (void). 0 dan 16 gacha turli turlardagi parametrlarni qabul qilishi mumkin.
  • Func<T1, ..., Tn, TResult>: TResult turidagi qiymatni qaytaradigan delegat. 0 dan 16 gacha turli turlardagi parametrlarni qabul qilishi mumkin.
  • Predicate<T>: T turidagi parametrni qabul qiladigan va boolean qiymat qaytaradigan delegat. Shartlarni tekshirish uchun ishlatiladi.

Ichki delegatlarning taqqoslash jadvali:

Delegat Qaytish qiymati Parametrlar Foydalanish misoli
Action void 0..16 parametrlar Qaytarmaydigan amalni bajarish
Func<TResult> TResult 0 parametr + TResult qiymat qaytarish Kiritmasiz hisoblash
Func<T, TResult> TResult 1 parametr T + TResult qiymat qaytarish Qiymatni o‘zgartirish
Predicate<T> bool 1 parametr T Shartni tekshirish

Delegatlar keng qo‘llaniladi voqealarni boshqarish, asinxron operatsiyalar, LINQ va callbacklarni amalga oshirishda.