Sobes.tech
Junior

Mis on delegaat C#-s?

sobes.tech AI

Vastus AI-lt

Deleegat on viitel tüüp, mis on deklareeritud võtmesõnaga delegate. See inkapsuleerib meetodi kindla signatuuriga (tagastatava tüübi ja parameetrite tüüpide). Põhimõtteliselt on deleegat tüüpi ohutu näitaja meetodile.

Deleegatite peamised omadused:

  • Meetodite inkapsuleerimine: Deleegat salvestab teavet meetodi kohta, millele ta viitab.
  • Tüübiohutust: Deleegat võib viidata ainult neile meetoditele, mille signatuur vastab täpselt deleegati signatuurile.
  • Multicast: Deleegad võivad viidata mitmele meetodile samaaegselt. Deleegati kutsumisel kutsutakse kõik sellega seotud meetodid nende lisamise järjekorras.

Näide deklaratsioonist ja kasutamisest:

// Deleegati deklaratsioon
public delegate int MyDelegate(int x, int y);

// Meetod, mis vastab deleegati signatuurile
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Deleegati kasutamine
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Deleegati näide, loomine ja ühendamine Add meetodiga
        MyDelegate del = new MyDelegate(calc.Add);

        // Meetodi kutsumine deleegati kaudu
        int result = del(5, 3);
        System.Console.WriteLine(result); // Väljund: 8
    }
}

.NET Framework 3.5 ja LINQ ilmumisega laienesid laialdaselt sisseehitatud geneerilised deleegad:

  • Action<T1, ..., Tn>: Deleegat, mis ei tagasta väärtust (void). Võib vastu võtta 0 kuni 16 erinevat tüüpi parameetrit.
  • Func<T1, ..., Tn, TResult>: Deleegat, mis tagastab väärtuse tüüpi TResult. Võib vastu võtta 0 kuni 16 erinevat tüüpi parameetrit.
  • Predicate<T>: Deleegat, mis võtab ühe parameetri T ja tagastab boolean väärtuse. Kasutatakse tingimuste kontrollimiseks.

Sisseehitatud deleegade võrdlustabel:

Deleegat Tagastatav väärtus Parameetrid Näide kasutamisest
Action void 0..16 parameetrit Tegevuse teostamine ilma tagastusteta
Func<TResult> TResult 0 parameetrit + TResult tagastamine Arvutus ilma sisendandmeteta
Func<T, TResult> TResult 1 parameeter T + TResult tagastamine Väärtuse teisendamine
Predicate<T> bool 1 parameeter T Tingimuse kontrollimine

Deleegad on laialdaselt kasutusel sündmuste töötlemisel, asünkroonsetes operatsioonides, LINQ-is ja tagasikutsumiste (callback) realiseerimisel.