Junior
Mi az a delegált a C#-ban?
sobes.tech MI
Válasz az MI-től
A delegate egy hivatkozási típus, amelyet a delegate kulcsszóval lehet deklarálni. Egy adott szignatúrával (visszatérési típus és paraméter típusok) rendelkező módszert inkapszulál. Lényegében a delegate egy típusbiztos mutató egy módszerre.
A delegate fő tulajdonságai:
- Módszerek inkapszulálása: A delegate tárolja az információkat arról a módszerről, amelyre hivatkozik.
- Típusbiztonság: A delegate csak olyan módszerekre hivatkozhat, amelyek szignatúrája pontosan megegyezik a delegate szignatúrájával.
- Multicast: A delegate több módszerre is hivatkozhat egyszerre. A delegate hívásakor minden kapcsolódó módszer a hozzáadás sorrendjében kerül meghívásra.
Deklaráció és használat példája:
// Delegate deklaráció
public delegate int MyDelegate(int x, int y);
// A delegate szignatúrájának megfelelő módszer
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Delegate használata
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Delegate példány létrehozása és az Add módszerhez kötés
MyDelegate del = new MyDelegate(calc.Add);
// A módszer hívása a delegate segítségével
int result = del(5, 3);
System.Console.WriteLine(result); // Kimenet: 8
}
}
A .NET Framework 3.5 és LINQ megjelenésével beépített generikus delegátusok széles körben elterjedtek:
Action<T1, ..., Tn>: Olyan delegát, amely nem ad vissza értéket (void). 0-tól 16-ig terjedő különböző típusú paramétereket fogad el.Func<T1, ..., Tn, TResult>: Olyan delegát, amelyTResulttípusú értéket ad vissza. 0-tól 16-ig terjedő különböző típusú paramétereket fogad el.Predicate<T>: Olyan delegát, amely egyTtípusú paramétert fogad és boolean értéket ad vissza. Feltételek ellenőrzésére használják.
Az beépített delegátusok összehasonlító táblázata:
| Delegátus | Visszatérési érték | Paraméterek | Használati példa |
|---|---|---|---|
Action |
void |
0..16 paraméter | Művelet végrehajtása visszatérési érték nélkül |
Func<TResult> |
TResult |
0 paraméter + TResult visszatérési érték |
Számítás bemenet nélkül |
Func<T, TResult> |
TResult |
1 paraméter T típusú + TResult visszatérési érték |
Érték átalakítása |
Predicate<T> |
bool |
1 paraméter T típusú |
Feltétel ellenőrzése |
A delegate-ek széles körben használatosak eseménykezelésben, aszinkron műveletekben, LINQ-ban és callback-ek implementálásában.