Sobes.tech
Junior

C# да делегаттар эмне жана алар эмне үчүн колдонулат?

sobes.tech AI

AIден жооп

C# тилиндеги делегаттар — бул ыкмаларды типтик коопсуз көрсөткүчтөр. Алар ыкманы капсуладайт жана аны параметр катары өткөрүүгө же өзгөрмө тиби катары колдонууга мүмкүндүк берет.

Кулланылат:

  • Көзөмөлдөө үлгүсүн ишке ашыруу (Observer): C#теги окуялар делегаттарга негизделген. Жазуучу жазылуучуларга делегатты чакырып билдирет.
  • Обратный чакыруулар (Callbacks): Ыкманы функциянын аргументы катары өткөрүү, ал кийинчерээк чакырылат.
  • Жалпы программалоо: Action жана Func делегаттары ар кандай сигнатуралар менен иштей турган жалпы ыкмаларды түзүүгө мүмкүндүк берет.
  • Параллел жана асинхрон программалоо: Башка агымдарда же асинхрон түрдө ишке ашырылуучу ыкмалар көбүнчө делегаттар аркылуу өткөрүлөт.
  • LİNQ: LINQ операторлору шарттарды аныктоо, түрлендирүү жана башка иштер үчүн делегаттарды активдүү колдонушат.

Делегаттын декларациясы жана колдонулушунун мисалы:

// void сигнатурасы жана бир аргументти (int) камтыган делегатты декларациялоо
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}");
    }
}