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žTResulttipu. Var pieņemt no 0 līdz 16 dažādus tipu parametrus.Predicate<T>: Deleģēts, kas pieņem vienu parametruTun 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ā.