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}");
    }
}