Junior
Kas yra delegatai C# ir kam jie naudojami?
sobes.tech AI
Atsakymas iš AI
C# delegatai yra tipui saugūs metodų nuorodos. Jie inkapsuliuoja metodą, leidžiantį jį perduoti kaip parametrą arba naudoti kaip kintamojo tipą.
Naudojami:
- Stebėtojo (Observer) modelio įgyvendinimas: C# įvykiai grindžiami delegatais. Leidėjas praneša prenumeratoriams iškviesdamas delegatą.
- Atgaliniai iškvietimai (Callbacks): Metodo perdavimas kaip funkcijos argumento, kuris vėliau jį iškvies.
- Bendrojo programavimo:
ActionirFuncdelegatai leidžia kurti bendrus metodus, dirbančius su įvairiomis signatūromis. - Lygiagretus ir asinchroninis programavimas: Metodai, vykdomi kituose srautuose arba asinchroniškai, dažnai perduodami per delegatus.
- LİNQ: LINQ operatoriai aktyviai naudoja delegatus filtro sąlygoms, transformacijoms ir kt. apibrėžti.
Delegato deklaracija ir naudojimo pavyzdys:
// Delegato deklaracija su `void` signatūra ir vienu `int` argumentu
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Skaičius: {num}");
}
public static void Main(string[] args)
{
// Delegato pavyzdys, nurodantis į `PrintNumber` metodą
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Metodo iškvietimas per delegatą
del(10);
}
}
Pavyzdys su Action (void metodams):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // vykdome perduotą delegatą
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Sveiki iš Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Pavyzdys su Func (metodai su grąžinamosios reikšmės):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // vykdome perduotą operaciją ir grąžiname rezultatą
}
public static void Main(string[] args)
{
Func<int, int, int> add = (x, y) => x + y;
int result = new ThirdClass().Calculate(add, 5, 3);
Console.WriteLine($"Sudėtis rezultatas: {result}");
}
}