Συνιστάται, 2024

Επιλογή Συντάκτη

Η διαφορά μεταξύ των εκπροσώπων και των εκδηλώσεων στο C #

η χρήση των εκδηλώσεων και των εκδηλώσεων διαδραματίζουν σημαντικό ρόλο στο πρόγραμμα που καθοδηγείται από γεγονότα. Οι εκπρόσωποι μπορούν να αναφερθούν σε μια μέθοδο και είναι αρκετά παρόμοιοι με τον δείκτη λειτουργίας στη C ++. Τα συμβάντα ενημερώνουν ότι έχει γίνει κάποια ενέργεια. Η βασική διαφορά μεταξύ των εκπροσώπων και των συμβάντων είναι ότι οι εκπρόσωποι κρατούν την αναφορά των μεθόδων και το συμβάν παρέχει έναν τρόπο πρόσβασης σε αυτή τη μέθοδο χρησιμοποιώντας τους αντιπροσώπους.

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΑντιπρόσωποιΕκδηλώσεις
ΒασικόςΈνας αντιπρόσωπος έχει την αναφορά σε μια μέθοδο.Το γεγονός είναι μια υπερ-στρωμένη αφαίρεση που παρέχεται στους αντιπροσώπους.
Σύνταξηdelegate_name return_type delegate_name (parameter_list);event_delegate event_name;
Λέξη κλειδίΈνας αντιπρόσωπος δηλώνεται χρησιμοποιώντας μια λέξη-κλειδί "εκπρόσωπος".Ένα συμβάν δηλώνεται χρησιμοποιώντας μια λέξη-κλειδί "συμβάν".
ΔήλωσηΈνας εκπρόσωπος δηλώνεται έξω από οποιαδήποτε τάξη.Ένα γεγονός δηλώνεται μέσα σε μια τάξη.
ΕπικαλούμαιΓια να επικαλεσθεί μια μέθοδο πρέπει να παραπεμφθεί στον αντιπρόσωπο.Για να ενεργοποιήσετε μια μέθοδο, πρέπει να αντιστοιχιστεί στο συμβάν.
Covariance και ContravarianceΠαρέχουν ευελιξία στους αντιπροσώπους.Δεν υπάρχει τέτοια έννοια.
Event AccessorΔεν υπάρχει τέτοια έννοια.Διαχειρίζεται τη λίστα των χειριστών συμβάντων.
ΕξάρτησηΟι εκπρόσωποι είναι ανεξάρτητοι από τα γεγονότα.Η εκδήλωση δεν μπορεί να δημιουργηθεί χωρίς αντιπροσώπους.

Ορισμός των εκπροσώπων

Στο C # οι εκπρόσωποι χρησιμοποιούνται ως δείκτης λειτουργίας για να παραπέμψουν μια μέθοδο. Είναι συγκεκριμένα ένα αντικείμενο που αναφέρεται σε μια μέθοδο που έχει εκχωρηθεί σε αυτό. Ο ίδιος πληρεξούσιος μπορεί να χρησιμοποιηθεί για να αναφερθεί διαφορετικές μέθοδοι, καθώς είναι ικανή να κρατάει την αναφορά διαφορετικών μεθόδων, αλλά μία, τη φορά. Ποια μέθοδος θα επικαλεσθεί ο εκπρόσωπος καθορίζεται κατά το χρόνο εκτέλεσης. Η σύνταξη δήλωσης ενός εκπροσώπου είναι ως εξής:

 delegate_name return_type delegate_name (parameter_list); 

Εδώ, ο τύπος return_type δηλώνει τον τύπο της αξίας που επιστρέφεται από τη μέθοδο, που ονομάζεται από το delegate και το delegate_name είναι το όνομα του αντιπροσώπου. Η λίστα παραμέτρων καθορίζει τη λίστα με τις παραμέτρους που απαιτούνται από τις μεθόδους που θα καλέσει ο εκπρόσωπος.

Υπάρχουν ορισμένα σημαντικά σημεία που πρέπει να θυμόμαστε για τους αντιπροσώπους. Μπορεί να καλέσει οποιαδήποτε μέθοδο αντιστοιχεί στην υπογραφή και τον τύπο επιστροφής. Ένας εκπρόσωπος μπορεί να καλέσει και μια μέθοδο στιγμής ή μια στατική μέθοδο. Αν ονομάζει μια μέθοδο παρουσίας, πρέπει να πάρει τη βοήθεια του αντικειμένου για να επικαλεσθεί τη μέθοδο. Οι αντιπρόσωποι υποστηρίζουν την πολυεκκίνηση, δηλ. Μπορείτε να δημιουργήσετε αλυσίδες με τις μεθόδους που θα καλούνται αυτομάτως όταν ο πληρεξούσιος που τους παραπέμπει. Απλά πρέπει να δημιουργήσετε ένα αντικείμενο αντιπροσωπευτικού και να αναθέσετε τις μεθόδους μία στην άλλη στην αλυσίδα χρησιμοποιώντας τον χειριστή "+ =". Μπορείτε επίσης να ανοίξετε μια μέθοδο χρησιμοποιώντας τον χειριστή "- =".

Τα χαρακτηριστικά που προσθέτουν μεγαλύτερη ευελιξία στον εκπρόσωπο είναι τα Covariance και Contravariance. Η Covariance και η Contravariance επιτρέπουν την προϋπόθεση όπου ο τύπος επιστροφής και η υπογραφή της μεθόδου που έχει οριστεί για την ανάθεση είναι διαφορετικά από εκείνα του αντιπροσώπου.

  • Το Covariance σάς επιτρέπει να ορίσετε μια μέθοδο στον αντιπρόσωπο, όπου ο τύπος επιστροφής της μεθόδου είναι μια κλάση που προέρχεται από την κλάση που καθορίζει τον τύπο επιστροφής του αντιπροσώπου.
  • Το Contravariance σάς επιτρέπει να ορίσετε μια μέθοδο στον εκπρόσωπο, όπου ο τύπος παραμέτρου της μεθόδου είναι μια βασική κλάση της κλάσης που ορίζεται ως η παράμετρος του πληρεξουσίου.

Ορισμός των γεγονότων

Τα συμβάντα είναι η ενέργεια που εκτελείται, η οποία αλλάζει την κατάσταση ενός αντικειμένου. Τα γεγονότα δηλώνονται με τη χρήση εκπροσώπων, χωρίς την παρουσία αντιπροσώπων που δεν μπορείτε να δηλώσετε γεγονότα. Μπορείτε να πείτε ότι ένα γεγονός παρέχει ενθυλάκωση στους αντιπροσώπους. Υπάρχουν δύο σημαντικές ενώσεις όταν ασχολούμαστε με συμβάντα που είναι χειριστές συμβάντων και συμβάντων. Εάν τα αντικείμενα ενδιαφέρονται για το συμβάν, τότε καταγράφει έναν χειριστή συμβάντων για το συγκεκριμένο συμβάν. Και όποτε ενεργοποιούνται τα συμβάντα, καλούνται οι χειριστές συμβάντων που έχουν καταχωριστεί. Η δήλωση της εκδήλωσης είναι η εξής:

 event_delegate event_name; 

Εδώ, το "συμβάν" είναι μια λέξη-κλειδί που δείχνει τη δήλωση ενός γεγονότος. Στη συνέχεια, το event_delegate εμφανίζει το όνομα του αντιπροσώπου που υποστηρίζει το συμβάν. Στη συνέχεια, event_name είναι το όνομα του συμβάντος

Υπάρχουν μερικά σημαντικά σημεία που πρέπει να θυμόμαστε όταν ασχολούμαστε με τα γεγονότα. Όπως και οι εκπρόσωποι, τα γεγονότα μπορούν επίσης να είναι πολυεκπομπή, δηλ. Πολλαπλά αντικείμενα που είναι συνδεδεμένα (καταχωρημένα) σε ένα χειριστή συμβάντων, να ανταποκριθούν όταν δημιουργηθεί ένα συμβάν. Οι χειριστές συμβάντων μπορούν να προστεθούν στην αλυσίδα χρησιμοποιώντας τον χειριστή "+ =" και μπορούν να ξεφυλλιστούν χρησιμοποιώντας τον χειριστή "- =" Και η μέθοδος static και instance μπορούν να χρησιμοποιηθούν ως διαχειριστές συμβάντων. Το accessor του συμβάντος μπορεί να σας δώσει τον έλεγχο της εφαρμογής της λίστας χειριστών συμβάντων.

Η διεπαφή μπορεί να περιέχει συμβάντα. Τα γεγονότα μπορούν επίσης να είναι αφηρημένα ενώ το γεγονός που βασίζεται σε accessor δεν μπορεί να είναι αφηρημένο. Το συμβάν μπορεί να είναι εικονικό και να παρακάμπτεται από την παράγωγη κλάση.

Βασικές διαφορές μεταξύ των εκπροσώπων και των εκδηλώσεων στο C #

  1. Ο εξουσιοδοτημένος εκπρόσωπος είναι ένα αντικείμενο που χρησιμοποιείται ως δείκτης λειτουργίας για τη διατήρηση της αναφοράς μιας μεθόδου. Από την άλλη πλευρά, τα γεγονότα παρέχουν μια αφαίρεση στους αντιπροσώπους.
  2. Μια λέξη-κλειδί που απαιτείται για να δηλωθεί ένας εκπρόσωπος είναι ένας εκπρόσωπος, ενώ μια λέξη-κλειδί που απαιτείται για να δηλώσει ένα γεγονός είναι γεγονός .
  3. Ένας εκπρόσωπος δηλώνεται εκτός τάξης, ενώ ένα γεγονός δηλώνεται μέσα σε μια τάξη.
  4. Για να καλέσετε μια μέθοδο χρησιμοποιώντας ένα αντικείμενο delegate, η μέθοδος πρέπει να παραπέμπεται στο αντικείμενο delegate. Από την άλλη πλευρά, για να χρησιμοποιήσετε μια μέθοδο χρησιμοποιώντας ένα αντικείμενο συμβάντος, η μέθοδος πρέπει να αναφέρεται στο αντικείμενο συμβάντος.
  5. Το Covariance και το Contravariance παρέχουν επιπλέον ευελιξία στα αντικείμενα των αντιπροσώπων. Από την άλλη πλευρά, η εκδήλωση δεν έχει τέτοιες έννοιες.
  6. Το Event Accessor χειρίζεται τον κατάλογο των χειριστών συμβάντων ενώ ο εκπρόσωπος δεν έχει τέτοια ιδέα.
  7. Οι εκπρόσωποι είναι ανεξάρτητοι από τα γεγονότα, αλλά τα γεγονότα δεν μπορούν να δημιουργηθούν χωρίς τον εκπρόσωπο.

Συμπέρασμα:

Οι εκπρόσωποι είναι χρήσιμοι καθώς υποστηρίζουν τα γεγονότα και παρέχουν τη δυνατότητα εκτέλεσης της μεθόδου κατά τη διάρκεια εκτέλεσης. Το πρόγραμμα προσπέλασης συμβάντος μας επιτρέπει να συγχρονίζουμε τους χειριστές συμβάντων σε εφαρμογές πολλαπλών ρυθμίσεων.

Top