Junior
Τι είναι ένας delegate στο C#;
sobes.tech AI
Απάντηση από AI
Ένας delegate είναι ένας τύπος αναφοράς που δηλώνεται με τη λέξη-κλειδί delegate. Περιλαμβάνει μια μέθοδο με μια συγκεκριμένη υπογραφή (τύπο επιστροφής και τύπους παραμέτρων). Στην ουσία, ένας delegate είναι ένας τύπος-ασφαλής δείκτης σε μια μέθοδο.
Βασικά χαρακτηριστικά των delegates:
- Ενσωμάτωση μεθόδων: Ο delegate αποθηκεύει πληροφορίες σχετικά με τη μέθοδο στην οποία αναφέρεται.
- Ασφάλεια τύπων: Ο delegate μπορεί να αναφέρεται μόνο σε μεθόδους των οποίων η υπογραφή ταιριάζει ακριβώς με αυτή του delegate.
- Πολυαριθμία (Multicast): Οι delegates μπορούν να αναφέρονται σε πολλές μεθόδους ταυτόχρονα. Όταν καλείται ένας delegate, καλούνται όλες οι συνδεδεμένες μέθοδοι με τη σειρά που προστέθηκαν.
Παράδειγμα δήλωσης και χρήσης:
// Δήλωση delegate
public delegate int MyDelegate(int x, int y);
// Μέθοδος που ταιριάζει με την υπογραφή του delegate
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Χρήση του delegate
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Δημιουργία στιγμιότυπου delegate και σύνδεση με τη μέθοδο Add
MyDelegate del = new MyDelegate(calc.Add);
// Κλήση της μεθόδου μέσω του delegate
int result = del(5, 3);
System.Console.WriteLine(result); // Εμφάνιση: 8
}
}
Με την εισαγωγή του .NET Framework 3.5 και LINQ, οι ενσωματωμένοι γενικοί delegates έγιναν ευρέως διαδεδομένοι:
Action<T1, ..., Tn>: Delegate που δεν επιστρέφει τιμή (void). Μπορεί να δεχτεί από 0 έως 16 παραμέτρους διαφορετικών τύπων.Func<T1, ..., Tn, TResult>: Delegate που επιστρέφει μια τιμή τύπουTResult. Μπορεί να δεχτεί από 0 έως 16 παραμέτρους διαφορετικών τύπων.Predicate<T>: Delegate που δέχεται μια παράμετρο τύπουTκαι επιστρέφει μια boolean τιμή. Χρησιμοποιείται για τον έλεγχο συνθηκών.
Πίνακας σύγκρισης των ενσωματωμένων delegates:
| Delegate | Τύπος επιστροφής | Παράμετροι | Παράδειγμα χρήσης |
|---|---|---|---|
Action |
void |
0..16 παράμετροι | Εκτέλεση ενέργειας χωρίς επιστροφή τιμής |
Func<TResult> |
TResult |
0 παράμετροι + επιστροφή TResult |
Υπολογισμός χωρίς εισόδους |
Func<T, TResult> |
TResult |
1 παράμετρος τύπου T + TResult |
Μετατροπή τιμής |
Predicate<T> |
bool |
1 παράμετρος τύπου T |
Έλεγχος συνθήκης |
Οι delegates χρησιμοποιούνται ευρέως στη διαχείριση γεγονότων, ασύγχρονες λειτουργίες, LINQ και για υλοποίηση callbacks.