Sobes.tech
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();