Sobes.tech
Junior

Kas ir delegāts C#?

sobes.tech AI

Atbilde no AI

Deleģēts ir atsauces tips, kas ir deklarēts ar atslēgas vārdu delegate. Tas inkapsulē metodi ar noteiktu signatūru (atgriežamā tipa un parametru tipiem). Būtībā, deleģēts ir tipa droša metode norāde.

Galvenās deleģētu īpašības:

  • Metožu inkapsulācija: Deleģēts glabā informāciju par metodi, uz kuru tas norāda.
  • Tipa drošība: Deleģēts var norādīt tikai uz tās metodes, kuru signatūra precīzi atbilst deleģēta signatūrai.
  • Multicast: Deleģēti var norādīt uz vairākām metodēm vienlaikus. Izsaucot deleģētu, tiek izsauktas visas ar to saistītās metodes pēc to pievienošanas secības.

Piemērs deklarācijai un izmantošanai:

// Deleģēta deklarācija
public delegate int MyDelegate(int x, int y);

// Metode, kas atbilst deleģēta signatūrai
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Deleģēta izmantošana
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Deleģēta instances izveide un sasaistīšana ar Add metodi
        MyDelegate del = new MyDelegate(calc.Add);

        // Metodes izsaukšana caur deleģētu
        int result = del(5, 3);
        System.Console.WriteLine(result); // Izvade: 8
    }
}

Ar .NET Framework 3.5 un LINQ parādīšanās, plaši izplatījās iebūvētie ģeneriskie deleģēti:

  • Action<T1, ..., Tn>: Deleģēts, kas neatgriež vērtību (void). Var pieņemt no 0 līdz 16 dažādus tipu parametrus.
  • Func<T1, ..., Tn, TResult>: Deleģēts, kas atgriež TResult tipu. Var pieņemt no 0 līdz 16 dažādus tipu parametrus.
  • Predicate<T>: Deleģēts, kas pieņem vienu parametru T un atgriež boolean vērtību. Izmanto nosacījumu pārbaudē.

Salīdzināšanas tabula ar iebūvētajiem deleģētiem:

Deleģēts Atgriežamā vērtība Parametri Piemērs izmantošanai
Action void 0..16 parametri Darbības izpilde bez atgrieztās vērtības
Func<TResult> TResult 0 parametri + TResult atgriešana Aprēķins bez ieejas datiem
Func<T, TResult> TResult 1 parametrs T + TResult atgriešana Vērtības pārveidošana
Predicate<T> bool 1 parametrs T Nosacījumu pārbaude

Deleģēti plaši tiek izmantoti notikumu apstrādē, asinhronajās operācijās, LINQ un atpakaļzvanu realizācijā.