Junior
Ce sunt delegații în C# și pentru ce sunt folosiți?
sobes.tech AI
Răspuns de la AI
Delegatii în C# sunt pointeri siguri de tip către metode. Ei încapsulează o metodă, permițându-i să fie transmisă ca parametru sau utilizată ca tip de variabilă.
Sunt folosiți pentru:
- Implementarea pattern-ului observator (Observer): Evenimentele în C# se bazează pe delegați. Emitentul notifică abonații apelând delegatul.
- Callback-uri: Transmiterea unei metode ca argument către o funcție care o va apela mai târziu.
- Programare generică: Delegatii
ActionșiFuncpermit crearea de metode generice care funcționează cu diferite semnături. - Programare paralelă și asincronă: Metodele pentru execuție în alte thread-uri sau asincron sunt adesea transmise prin delegați.
- LİNQ: Operatorii LINQ utilizează activ delegați pentru a defini condiții de filtrare, transformare etc.
Exemplu de declarație și utilizare a unui delegat:
// Declararea unui delegat cu semnătura void și un argument de tip int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Număr: {num}");
}
public static void Main(string[] args)
{
// Crearea unei instanțe de delegat care indică metoda PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Apelarea metodei prin delegat
del(10);
}
}
Exemplu cu Action (pentru metode void fără valoare de returnare):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Execută delegatul transmis
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Salut din Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Exemplu cu Func (pentru metode cu valoare de returnare):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Execută operația transmisă și returnează rezultatul
}
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($"Rezultatul adunării: {result}");
}
}