Junior
Co jsou delegáti v C# a k čemu slouží?
sobes.tech AI
Odpověď od AI
Delegáti v jazyce C# jsou typově bezpečné ukazatele na metody. Zapouzdřují metodu, což umožňuje její předání jako parametru nebo použití jako typu proměnné.
Používají se pro:
- Implementaci vzoru pozorovatele (Observer): Události v C# jsou založeny na delegátech. Vysílač upozorňuje odběratele voláním delegáta.
- Callbacky: Předání metody jako argumentu funkci, která ji později zavolá.
- Obecné programování: Delegáty
ActionaFuncumožňují vytvářet obecné metody pracující s různými podpisy. - Paralelní a asynchronní programování: Metody pro provádění v jiných vláknech nebo asynchronně jsou často předávány přes delegáty.
- LİNQ: Operátory LINQ aktivně využívají delegáty k definování podmínek filtrování, transformace atd.
Příklad deklarace a použití delegáta:
// Deklarace delegáta s podpisem void a jedním argumentem typu int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Číslo: {num}");
}
public static void Main(string[] args)
{
// Vytvoření instance delegáta ukazující na metodu PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Volání metody přes delegáta
del(10);
}
}
Příklad s Action (pro void metody bez návratové hodnoty):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Spuštění předaného delegáta
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Ahoj z Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Příklad s Func (pro metody s návratovou hodnotou):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Spuštění předané operace a vrácení výsledku
}
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($"Výsledek sčítání: {result}");
}
}