Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Event Handlers

Îåêßíçóå áðü ôï ìÝëïò Markos. Τελευταία δημοσίευση από το μέλος gnikolaropoulos στις 14-12-2010, 09:08. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-10-2010, 23:39 60404

    Event Handlers

    Στο "How to: Subscribe to and Unsubscribe from Events" περιγράφεται με πολύ κατανοητό τρόπο πως να κάνεις subscribe και unsubscribe προγραμματιστικά σ' ένα event. Εν ολίγοις:

    Subscribe:  publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

    Unsubscribe: publisher.RaiseCustomEvent -= HandleCustomEvent;

    Συνέχεια πέφτω για το Unsubscribe πάνω στην σύνταξη:

    publisher.RaiseCustomEvent -= new CustomEventHandler(HandleCustomEvent);

    Αυτή η τελευταία είναι σωστή ή λάθος;


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  04-10-2010, 09:06 60409 σε απάντηση της 60404

    Απ: Event Handlers

    Όχι, δεν είναι λάθος. Οι δύο συντάξεις είναι ακριβώς το ίδιο. Και στις δύο περιπτώσεις περνάς ένα delegate object (CustomEventHandler) με παράμετρο το function που θα κληθεί (HandleCustomEvent). Μπορείς να παραλείψεις τη δημιουργία του delegate object (new CustomEventHandler) και ο compiler θα δημιουργήσει την κατάλληλη κλήση αυτόματα. Τελικά, και οι δύο κλήσεις δημιουργούν τον ίδιο κώδικα. Απλά, το +/-= HandleCustomEvent είναι πολύ ευκολότερο στο γράψιμο, γι αυτό και το προτιμούν όλοι.

    Δες το και αλλιώς. Δουλεύει, άρα μάλλον δεν να είναι λάθος.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-10-2010, 10:14 60410 σε απάντηση της 60409

    Απ: Event Handlers

    Παναγιώτης Καναβός:

    Απλά, το +/-= HandleCustomEvent είναι πολύ ευκολότερο στο γράψιμο, γι αυτό και το προτιμούν όλοι.

    Μπα... όλοι το γράφουν με το new. Η μορφή "publisher.RaiseCustomEvent -= new CustomEventHandler(HandleCustomEvent);" είναι ο κανόνας και όχι η εξαίρεση. Καλά στο subscribe, αυτό που μου φάνηκε περίεργο είναι η χρήση του "new" στο unsubscribe. Αφού, όμως, είναι σωστές και οι δύο μορφές όλα τ' άλλα είναι "λεπτολογίες".

    Ευχαριστώ.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  04-10-2010, 14:46 60414 σε απάντηση της 60410

    Απ: Event Handlers

    To wiring/unwiring με χρήση απευθείας του method name είναι C# 2.0. ΙΜΗΟ, αφενός πολύς κόσμος έχει συνηθήσει τη σύνταξη με explicit delegates, αφετέρου τα delegates γενικά δεν είναι κάτι που κατέχει ο μέσος developer πράγμα που συνεπάγεται αρκετό copy/paste και γι αυτό συναντάται αρκετά η "παλιά" σύνταξη. Εξάλλου, αν με το +={tab}{tab} ο editor σου παράγει κώδικα με τον παλίο τρόπο, τότε υπάρχει ένα υπονοούμενο του τύπου "για να γράφει έτσι ο editor αυτός είναι ο ενδεδειγμένος τρόπος".

     


    Vir prudens non contra ventum mingit
  •  01-12-2010, 09:02 61222 σε απάντηση της 60414

    Απ: Event Handlers

    Εάν ο event handler είναι μέχρι και 3 γραμμές κώδικα μπορούμε πλέον να τον γράψουμε in-line.

    publisher.RaiseCustomEvent += (sender, e)=> {
    // ...
    };

    publisher.RaiseCustomerEvent -= (sender, e)=> { /* ... */ };



    http://nikosbaxevanis.com
  •  14-12-2010, 09:08 61603 σε απάντηση της 60404

    Απ: Event Handlers

    Θεωρώ πάντως λιγό verbose την έκδοχή σου, Subscribe:  publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
    Θα προτιμούσα την απλή: publisher.RaiseCustomEvent += HandleCustomEvent; που σαφώς και δεν είναι σε καμία περίπτωση C# 2.0. 
    Αντιθέτως θεωρείται πλεον mainstream. Είχε γίνει πολλή μεγάλη κουβέντα να το κάνει έτσι απλό η MS και νομίζω οτι το πέτυχε. Αλλά πάντα παραμένει και θέμα γούστου...

    Επίσης όντως θα πρέπει να κοιτάς αν βολεύει να βάζεις inline τον handler...


    softwarebytes.blogspot.com
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems