Junior
Τι είναι οι delegates στη C# και για ποιο λόγο χρησιμοποιούνται;
sobes.tech AI
Απάντηση από AI
Οι delegates στη C# είναι τύποι ασφαλών δεικτών σε μεθόδους. Κάπνουν μια μέθοδο, επιτρέποντάς της να μεταβιβαστεί ως παράμετρος ή να χρησιμοποιηθεί ως τύπος μεταβλητής.
Χρησιμοποιούνται για:
- Εφαρμογή του μοτίβου παρατηρητή (Observer): Τα γεγονότα στη C# βασίζονται σε delegates. Ο εκδότης ειδοποιεί τους συνδρομητές καλώντας το delegate.
- Callbacks: Μεταβίβαση μιας μεθόδου ως ορίσματος σε μια λειτουργία που θα την καλέσει αργότερα.
- Γενικός προγραμματισμός: Τα delegates
ActionκαιFuncεπιτρέπουν τη δημιουργία γενικών μεθόδων που λειτουργούν με διαφορετικές υπογραφές. - Παράλληλος και ασύγχρονος προγραμματισμός: Οι μέθοδοι για εκτέλεση σε άλλα νήματα ή ασύγχρονα συχνά μεταβιβάζονται μέσω delegates.
- LİNQ: Οι τελεστές LINQ χρησιμοποιούν ενεργά delegates για τον ορισμό συνθηκών φιλτραρίσματος, μετασχηματισμού κ.λπ.
Παράδειγμα δήλωσης και χρήσης delegate:
// Δήλωση delegate με υπογραφή void και ένα όρισμα τύπου int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Αριθμός: {num}");
}
public static void Main(string[] args)
{
// Δημιουργία στιγμιότυπου delegate που δείχνει στη μέθοδο PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Κλήση της μεθόδου μέσω delegate
del(10);
}
}
Παράδειγμα με Action (για μεθόδους void χωρίς επιστρεφόμενο αποτέλεσμα):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Εκτέλεση του περασμένου delegate
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Γειά από Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Παράδειγμα με Func (για μεθόδους με επιστρεφόμενο αποτέλεσμα):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Εκτέλεση της περασμένης λειτουργίας και επιστροφή αποτελέσματος
}
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($"Αποτέλεσμα πρόσθεσης: {result}");
}
}