Sobes.tech
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, amely TResult tí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 egy T tí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.