Junior
Kas yra delegatas C#?
sobes.tech AI
Atsakymas iš AI
Delegatas yra nuorodinis tipas, deklaruotas naudojant raktinį žodį delegate. Jis inkapsuliuoja metodą su tam tikru signatu (grąžinamojo tipo ir parametrų tipais). Iš esmės, delegatas yra tipais saugus metodų rodyklė.
Pagrindinės delegatų savybės:
- Metodų inkapsuliacija: Delegatas saugo informaciją apie metodą, į kurį jis nuoroda.
- Tipų saugumas: Delegatas gali nuoroda tik į tuos metodus, kurių signatūra tiksliai atitinka delegato signatūrą.
- Multicast: Delegatai gali nuoroda į kelis metodus vienu metu. Iškvietus delegatą, iškviečiami visi su juo susieti metodai jų pridėjimo tvarka.
Pavyzdys deklaracijai ir naudojimui:
// Delegato deklaravimas
public delegate int MyDelegate(int x, int y);
// Metodas, atitinkantis delegato signatūrą
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Delegato naudojimas
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Delegato pavyzdys sukūrimas ir susiejimas su Add metodu
MyDelegate del = new MyDelegate(calc.Add);
// Metodo iškvietimas per delegatą
int result = del(5, 3);
System.Console.WriteLine(result); // Išvestis: 8
}
}
Su .NET Framework 3.5 ir LINQ atsiradimu, plačiai paplito įmontuoti generiniai delegatai:
Action<T1, ..., Tn>: Delegatas, kuris negrąžina reikšmės (void). Gali priimti nuo 0 iki 16 skirtingų tipų parametrų.Func<T1, ..., Tn, TResult>: Delegatas, kuris grąžina reikšmęTResult. Gali priimti nuo 0 iki 16 skirtingų tipų parametrų.Predicate<T>: Delegatas, kuris priima vieną parametrąTir grąžina boolean reikšmę. Naudojamas sąlygų tikrinimui.
Lyginamoji lentelė su įmontuotais delegatais:
| Delegatas | Grąžinamosios reikšmės tipas | Parametrai | Pavyzdys naudojimo |
|---|---|---|---|
Action |
void |
0..16 parametrų | Veiksmų vykdymas be grąžinamosios reikšmės |
Func<TResult> |
TResult |
0 parametrų + TResult grąžinimas |
Skaičiavimas be įvesties duomenų |
Func<T, TResult> |
TResult |
1 parametrą T + TResult grąžinimas |
Vertės konvertavimas |
Predicate<T> |
bool |
1 parametrą T |
Sąlygų tikrinimas |
Delegatai plačiai naudojami įvykių apdorojimui, asinchroninėse operacijose, LINQ ir atgalinių skambučių įgyvendinimui.