Sobes.tech
Junior

Wat is een delegate in C#?

sobes.tech AI

Antwoord van AI

Een delegate is een referentietype dat wordt gedeclareerd met het sleutelwoord delegate. Het encapsuleert een methode met een specifieke handtekening (returntype en parameter types). In wezen is een delegate een type-veilige pointer naar een methode.

Belangrijkste eigenschappen van delegates:

  • Methoden encapsulatie: De delegate slaat informatie op over de methode waarnaar hij verwijst.
  • Typeveiligheid: De delegate kan alleen verwijzen naar methoden waarvan de handtekening exact overeenkomt met die van de delegate.
  • Multicast: Delegates kunnen naar meerdere methoden tegelijk verwijzen. Bij het aanroepen van een delegate worden alle gekoppelde methoden in de volgorde van toevoeging aangeroepen.

Voorbeeld van declaratie en gebruik:

// Delegate declaratie
public delegate int MyDelegate(int x, int y);

// Methode die overeenkomt met de handtekening van de delegate
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Gebruik van de delegate
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Aanmaken van een delegate instantie en koppelen aan de Add-methode
        MyDelegate del = new MyDelegate(calc.Add);

        // Methode aanroepen via de delegate
        int result = del(5, 3);
        System.Console.WriteLine(result); // Output: 8
    }
}

Met de introductie van .NET Framework 3.5 en LINQ zijn de ingebouwde generieke delegates breed toegepast:

  • Action<T1, ..., Tn>: Delegate die geen waarde teruggeeft (void). Kan 0 tot 16 parameters van verschillende types accepteren.
  • Func<T1, ..., Tn, TResult>: Delegate die een waarde van type TResult teruggeeft. Kan 0 tot 16 parameters van verschillende types accepteren.
  • Predicate<T>: Delegate die één parameter van type T accepteert en een boolean waarde teruggeeft. Wordt gebruikt voor conditionele controles.

Vergelijkingstabel van de ingebouwde delegates:

Delegate Retourwaarde Parameters Voorbeeldgebruik
Action void 0..16 parameters Uitvoeren van een actie zonder terugkeerwaarde
Func<TResult> TResult 0 parameters + TResult terugkeerwaarde Berekening zonder invoergegevens
Func<T, TResult> TResult 1 parameter van type T + TResult terugkeerwaarde Waarde transformatie
Predicate<T> bool 1 parameter van type T Conditiecontrole

Delegates worden veel gebruikt bij event handling, asynchrone operaties, LINQ en voor het implementeren van callbacks.