Sobes.tech
Junior

C# da delegatlar nima va ular nima uchun ishlatiladi?

sobes.tech AI

AIdan javob

C# dasturlash tilida delegatlar — bu metodlarga xavfsiz turdagi ko‘rsatkichlardir. Ular metodni inkapsulyatsiya qiladi, uni parametr sifatida o'tkazishga yoki o'zgaruvchi turida ishlatishga imkon beradi.

Ular quyidagi maqsadlar uchun ishlatiladi:

  • Observer ( kuzatuvchi) shablonini amalga oshirish: C# da voqealar delegatlarga asoslangan. Yuboruvchi obunachilarga delegatni chaqirish orqali xabar beradi.
  • Callbacklar: Bir metodni keyinchalik chaqiriladigan funksiyaga argument sifatida o'tkazish.
  • Generic dasturlash: Action va Func delegatlari turli imzolar bilan ishlaydigan umumiy metodlarni yaratishga imkon beradi.
  • Parallel va asinxron dasturlash: Boshqa oqimlarda yoki asinxron tarzda bajariladigan metodlar ko'pincha delegatlar orqali o'tkaziladi.
  • LİNQ: LINQ operatorlari aktiv ravishda delegatlardan foydalanadi, filtrlash, transformatsiya qilish va boshqalar uchun shartlarni belgilashda.

Delegatni e'lon qilish va foydalanish misoli:

// void imzosi va bitta int turidagi argument bilan delegat e'lon qilish
public delegate void MyDelegate(int x);

public class MyClass
{
    public void PrintNumber(int num)
    {
        Console.WriteLine($"Raqam: {num}");
    }

    public static void Main(string[] args)
    {
        // PrintNumber metodiga ishora qiluvchi delegat nusxasini yaratish
        MyDelegate del = new MyDelegate(new MyClass().PrintNumber);

        // Delegat yordamida metodni chaqirish
        del(10);
    }
}

Action bilan misol (qaytarmasiz void metodlar uchun):

using System;

public class OtherClass
{
    public void ExecuteAction(Action action)
    {
        action(); // O'tkazilgan delegatni bajarish
    }

    public static void Main(string[] args)
    {
        Action myAction = () => Console.WriteLine("Action dan salom!");
        new OtherClass().ExecuteAction(myAction);
    }
}

Func bilan misol (qaytarmali metodlar uchun):

using System;

public class ThirdClass
{
    public int Calculate(Func<int, int, int> operation, int a, int b)
    {
        return operation(a, b); // O'tkazilgan operatsiyani bajarish va natijani qaytarish
    }

    public static void Main(string[] args)
    {
        Func<int, int, int> add = (x, y) => x + y;
        int result = new ThirdClass().Calculate(add, 5, 3);
        Console.WriteLine($"Qo'shish natijasi: {result}");
    }
}