Sobes.tech
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 Action en Func maken 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}");
    }
}