Junior
Wat zijn delegates in C# en waar worden ze voor gebruikt?
sobes.tech AI
Antwoord van AI
Delegates in C# zijn typeveilige pointers naar methoden. Ze encapsuleren een methode, waardoor deze als parameter kan worden doorgegeven of als variabelentype kan worden gebruikt.
Ze worden gebruikt voor:
- Implementatie van het observer-patroon: Gebeurtenissen in C# zijn gebaseerd op delegates. De uitgever informeert abonnees door de delegate aan te roepen.
- Callbacks: Een methode als argument doorgeven aan een functie die deze later zal aanroepen.
- Generieke programmering: Delegees
ActionenFuncmaken het mogelijk om generieke methoden te maken die met verschillende handtekeningen werken. - Parallel en asynchroon programmeren: Methoden die in andere threads of asynchroon worden uitgevoerd, worden vaak via delegates doorgegeven.
- LİNQ: LINQ-operatoren maken actief gebruik van delegates om filtervoorwaarden, transformaties, enz. te definiëren.
Voorbeeld van declaratie en gebruik van een delegate:
// Declaratie van een delegate met de handtekening void en één argument van het type int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Nummer: {num}");
}
public static void Main(string[] args)
{
// Aanmaken van een delegate instantie die wijst naar de methode PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Methode aanroepen via de delegate
del(10);
}
}
Voorbeeld met Action (voor methoden void zonder returnwaarde):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Voert de meegegeven delegate uit
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Hallo vanuit Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Voorbeeld met Func (voor methoden met returnwaarde):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Voert de meegegeven operatie uit en geeft het resultaat terug
}
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($"Somresultaat: {result}");
}
}