Sobes.tech
Junior

Kas ir delegāti C# un kam tie tiek izmanto?

sobes.tech AI

Atbilde no AI

C# delegāti ir tipa droši metožu norādītāji. Tie inkapsulē metodi, ļaujot to nodot kā parametru vai izmantot kā mainīgā tipu.

Tiek izmantoti:

  • Novērotāja (Observer) parauga īstenošana: C# notikumus balsta delegāti. Izdevējs informē abonentus, izsaucot delegātu.
  • Atpakaļzvani (Callbacks): Metodes nodošana kā funkcijas argumentu, kas to vēlāk izsauks.
  • Vispārējā programmēšana: Action un Func delegāti ļauj izveidot vispārējas metodes, kas darbojas ar dažādām signatūrām.
  • ** Paralēla un asinhrona programmēšana:** Metodes, kas tiek izpildītas citās pavedienos vai asinhroni, bieži tiek nodotas caur delegātiem.
  • LİNQ: LINQ operatori aktīvi izmanto delegātus, lai noteiktu filtra nosacījumus, pārveidojumus utt.

Delegāta deklarācija un izmantošanas piemērs:

// Deklarācija ar `void` signatūru un vienu `int` argumentu
public delegate void MyDelegate(int x);

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

    public static void Main(string[] args)
    {
        // Delegāta izveide, norādot uz `PrintNumber` metodi
        MyDelegate del = new MyDelegate(new MyClass().PrintNumber);

        // Metodes izsaukšana caur delegātu
        del(10);
    }
}

Piemērs ar Action (void metodes):

using System;

public class OtherClass
{
    public void ExecuteAction(Action action)
    {
        action(); // izpildām nodoto delegātu
    }

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

Piemērs ar Func (metodes ar atgriežamo vērtību):

using System;

public class ThirdClass
{
    public int Calculate(Func<int, int, int> operation, int a, int b)
    {
        return operation(a, b); // izpildām nodoto operāciju un atgriežam rezultātu
    }

    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($"Summa rezultāts: {result}");
    }
}