Junior
Mi a delegált a C#-ban, és mire használják őket?
sobes.tech MI
Válasz az MI-től
A C#-ban a delegátok típusbiztos mutatók a metódusokra. Egy metódust kapszuláznak, lehetővé téve, hogy paraméterként átadjuk vagy változó típusaként használjuk.
Felhasználási területek:
- Megfigyelő (Observer) mintázat megvalósítása: A C# eseményei delegátokra épülnek. A kibocsátó értesíti a feliratkozókat a delegát meghívásával.
- Visszahívások (Callbacks): Egy metódus átadása argumentumként egy olyan függvénynek, amely később meghívja.
- Általános programozás: Az
ActionésFuncdelegátusok lehetővé teszik általános metódusok létrehozását, amelyek különböző szignatúrákkal működnek. - Párhuzamos és aszinkron programozás: Olyan metódusokat, amelyek más szálakon vagy aszinkron módon futnak, gyakran delegátokon keresztül adunk át.
- LİNQ: A LINQ operátorok aktívan használják a delegátokat a szűrési, átalakítási feltételek meghatározására.
Delegátus deklaráció és használat példája:
// Void szignatúrájú és egy int típusú argumentummal rendelkező delegátus deklarációja
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Szám: {num}");
}
public static void Main(string[] args)
{
// Delegátus példány létrehozása, ami a PrintNumber metódusra mutat
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Metódus hívása delegátuson keresztül
del(10);
}
}
Action példával (void típusú metódusokhoz):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // A megadott delegátus végrehajtása
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Üdv Action-ből!");
new OtherClass().ExecuteAction(myAction);
}
}
Func példával (értéket visszaadó metódusokhoz):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // A megadott művelet végrehajtása és az eredmény visszaadása
}
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($"Összeg eredménye: {result}");
}
}