Sobes.tech
Junior

C# ში დელეგატები რა არის და რა მიზნით გამოიყენება?

sobes.tech AI

პასუხი AI-სგან

C#-да делегаттар — бұл әдістерге қауіпсіз көрсеткіштер. Олар әдісті инкапсуляциялайды, оны параметр ретінде беру немесе айнымалының типі ретінде пайдалану мүмкіндігін береді.

Қолданылады:

  • Қадағалау үлгісін жүзеге асыру (Observer): C#-дағы оқиғалар делегаттарға негізделген. Жариялаушы жазылушыларды делегатты шақыру арқылы хабарлайды.
  • Кері шақырулар (Callbacks): Әдісті функцияның аргументі ретінде беру, ол кейінірек шақырылады.
  • Жалпы бағдарламалау: Action және Func делегаттары әртүрлі сигнатуралармен жұмыс істейтін жалпы әдістерді құруға мүмкіндік береді.
  • Параллель және асинхронды бағдарламалау: Басқа ағындарда немесе асинхронды түрде орындалатын әдістер көбінесе делегаттар арқылы беріледі.
  • LİNQ: LINQ операторлары шарттарды анықтау, түрлендіру және т.б. үшін делегаттарды белсенді пайдаланады.

Делегатты жариялау және пайдалану мысалы:

// void сигнатурасы және бір аргументі бар делегатты жариялау
public delegate void MyDelegate(int x);

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

    public static void Main(string[] args)
    {
        // PrintNumber әдісіне сілтеме бар делегат құру
        MyDelegate del = new MyDelegate(new MyClass().PrintNumber);

        // Делегат арқылы әдісті шақыру
        del(10);
    }
}

Action мысалы (void қайтарымсыз әдістер үшін):

using System;

public class OtherClass
{
    public void ExecuteAction(Action action)
    {
        action(); // берілген делегатты орындау
    }

    public static void Main(string[] args)
    {
        Action myAction = () => Console.WriteLine("Сәлем Action-дан!");
        new OtherClass().ExecuteAction(myAction);
    }
}

Func мысалы (қайтарым мәні бар әдістер үшін):

using System;

public class ThirdClass
{
    public int Calculate(Func<int, int, int> operation, int a, int b)
    {
        return operation(a, b); // берілген операцияны орындап, нәтижесін қайтару
    }

    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($"Қосынды нәтижесі: {result}");
    }
}