Junior — Middle
Πώς διακρίνουμε έναν αντιπρόσωπο από ένα γεγονός και ποιες είναι οι βασικές διαφορές τους;
sobes.tech AI
Απάντηση από AI
Στη C# ο delegate είναι ένας τύπος που αντιπροσωπεύει μια αναφορά σε μια μέθοδο με μια συγκεκριμένη υπογραφή. Οι delegates επιτρέπουν την κλήση μεθόδων έμμεσα, περνώντας τες ως παραμέτρους ή αποθηκεύοντάς τες για μελλοντική χρήση.
Το γεγονός είναι ένας μηχανισμός βασισμένος σε delegates, που χρησιμοποιείται για την ειδοποίηση των συνδρομητών σχετικά με την εκδήλωση μιας ενέργειας ή μια αλλαγή κατάστασης. Το γεγονός encapsulates τον delegate και περιορίζει την πρόσβαση σε αυτό: οι συνδρομητές μπορούν μόνο να προσθέτουν ή να αφαιρούν χειριστές, αλλά δεν μπορούν να καλέσουν άμεσα το γεγονός.
Βασικές διαφορές:
- Ο delegate είναι ένας τύπος, το γεγονός είναι ένα μέλος κλάσης που χρησιμοποιεί έναν delegate.
- Ο delegate μπορεί να καλεστεί άμεσα, το γεγονός όχι (η κλήση του γεγονότος είναι δυνατή μόνο εντός της κλάσης όπου δηλώνεται).
- Το γεγονός παρέχει εν encapsulation και ασφάλεια, αποτρέποντας τυχαίες κλήσεις χειριστών από το εξωτερικό.
Παράδειγμα:
public delegate void Notify(string message); // delegate
public class Process
{
public event Notify ProcessCompleted; // γεγονός
public void Start()
{
// ... εκτέλεση της διαδικασίας
OnProcessCompleted("Η διαδικασία ολοκληρώθηκε");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // κλήση του γεγονότος
}
}
// Χρήση:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // εγγραφή
process.Start();