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üüpiTResult. Võib vastu võtta 0 kuni 16 erinevat tüüpi parameetrit.Predicate<T>: Deleegat, mis võtab ühe parameetriTja 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.