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 typeTResultteruggeeft. Kan 0 tot 16 parameters van verschillende types accepteren.Predicate<T>: Delegate die één parameter van typeTaccepteert 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.