Junior
Šta su delegati u C# i zašto se koriste?
sobes.tech АИ
Одговор од АИ
Delegati u C# su tipovski bezbedni pokazivači na metode. Oni inkapsuliraju metodu, omogućavajući joj da se prosledi kao parametar ili koristi kao tip promenljive.
Koriste se za:
- Implementaciju obrasca posmatrača (Observer): Događaji u C# se zasnivaju na delegatima. Pošiljalac obaveštava pretplatnike pozivom delegata.
- Callback-ove: Prosleđivanje metode kao argumenta funkciji koja će je kasnije pozvati.
- Generičko programiranje: Delegati
ActioniFuncomogućavaju kreiranje opštih metoda koji rade sa različitim potpisima. - Paralelno i asinhrono programiranje: Metode za izvršavanje u drugim nitima ili asinhrono često se prosleđuju putem delegata.
- LİNQ: LINQ operatori aktivno koriste delegate za definisanje uslova filtriranja, transformacije itd.
Primer deklaracije i korišćenja delegata:
// Deklaracija delegata sa potpisom void i jednim argumentom tipa int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Broj: {num}");
}
public static void Main(string[] args)
{
// Kreiranje instance delegata koja pokazuje na metodu PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Pozivanje metode putem delegata
del(10);
}
}
Primer sa Action (za void metode bez povratne vrednosti):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Izvršava prosleđeni delegat
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Zdravo iz Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Primer sa Func (za metode sa povratnom vrednošću):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Izvršava prosleđenu operaciju i vraća 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($"Rezultat sabiranja: {result}");
}
}