Sobes.tech
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 és Func delegá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}");
    }
}