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

 

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

Operator=

Îåêßíçóå áðü ôï ìÝëïò Alexander. Τελευταία δημοσίευση από το μέλος Alexander στις 11-12-2007, 14:33. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-12-2007, 12:15 38043

    Operator=

    Καλημέρα,
    πώς μπορώ να ορίσω τον operator= ;
    (σε C#)

  •  06-12-2007, 12:24 38044 σε απάντηση της 38043

    Απ: Operator=

    Τι ακριβώς εννοείς; Εννοείς να μπορέσεις να ορίσεις τον operator όπως θέλεις για να μπορείς να χρησιμοποιήσεις για να συγκρίνεις δυο objects που προέρχονται από μία δική σου κλάση;

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  06-12-2007, 12:31 38045 σε απάντηση της 38044

    Απ: Operator=

    Ακριβώς , αλλά όχι για να συγκρίνω, για να αναθέτω τιμές (π.χ. σε ένα νέο αντικείμενο τις τιμές ενός παλιού)
  •  06-12-2007, 13:14 38048 σε απάντηση της 38045

    Απ: Operator=

    Καλησπέρα Αλέξανδρε,

    Γιατί δεν κάνεις μια μεθοδο Clone() και μία CopyFrom.. στην Class σου?

    πχ.

    public class Person
    {
       public string Name;
       public string Surmane;

       ...


       public Person Clone()
       {
          Person retPerson = new Person();
          retPerson.Name = this.Name;
          retPerson.Surname = this.Surname;
          return retPerson;
       }

       public CopyFromPearson (Person p)
       {
          this.Name = p.Name;
          this.Surname = p.Surname;
       }
    }

     

    Nassos


    "Success is the ability to go from one failure to another with no loss of enthusiasm."
    Winston Churchill

    "Quality means doing it right when no one is looking."
    Henry Ford

  •  06-12-2007, 13:31 38049 σε απάντηση της 38048

    Απ: Operator=

    Ναι, κάτι τέτοιο έκανα τελικά. Πιο πολύ σαν απορία το είχα γιατί αν και έψαξα λίγο, βρήκα για πολλούς άλλους operators, αλλά όχι για τον =, και δεν αναφερόταν κάτι γι αυτό. Σαν λάθος έπαιρνα αυτό:    Overloadable unary operator expected  

  •  06-12-2007, 18:16 38068 σε απάντηση της 38049

    Απ: Operator=

    Αυτός είναι ένας από τους περιορισμούς της C# που πάντα μου την έδινε στα νεύρα, ιδιαίτερα γιατί στη C++ είναι τόσο απλό να κάνεις overload ό,τι τελεστή τραβά η ψυχή σου Smile Ο "ορθόδοξος" τρόπος για να το κάνεις αυτό είναι να υλοποιήσεις το IClonable interface που περιέχει την εξής μια method: Clone(). Αν όμως θέλεις απλά να δημιουργήσεις ένα αντίγραφο με όλα τα πεδία ίδια, τα οποία έχουν τιμές values ή strings, και όχι references σε άλλα objects, τότε σου αρκεί η έτοιμη Object.MemberwiseClone() που κάνει shallow copy.
    Νατάσα Μανουσοπούλου
  •  06-12-2007, 22:43 38074 σε απάντηση της 38068

    Απ: Operator=

    Άκουγα πρόσφατα ένα podcast του .NET Rocks, το οποίο ξεκίνησε λέγοντας γιατί ΔΕΝ πρέπει να χρησιμοποιούμε το IClonable! Ο λόγος είναι ότι δεν είναι καθορισμένο αν το IClonable.Clone κάνει shalow copy ή deep copy. Το αποτέλεσμα είναι ότι όποιος καλεί την Clone δεν ξέρει τελικά αν αυτό που θα πάρει θα είναι ένα deep ή ένα shallow copy του αντικειμένου. Γι αυτό στο podcast προτείνανε να μην χρησιμοποιεί κανείς το ICloneable αλλά απλά να προσθέσει τις δικές του μεθόδους στην κλάση του.

    Εδώ που τα λέμε πάντως, δεν είναι και τόσο καλή ιδέα να κάνει κάποιος override τον operator =. Ο operator = έχει μία πολύ συγκεκριμένη δουλειά στο .ΝΕΤ. Όποιος προγραμματιστής χρησιμοποιεί το = περιμένει να κάνει δύο πράγματα: να δημιουργήσει ένα reference, αν μιλάμε για κλάση, ή ένα αντίγραφο, αν μιλάμε για value type. Αν κάποιος αλλάξει το τί κάνει ο operator = μπορεί να προκαλέσει σύγχυση σε όσους τον χρησιμοποιήσουν.

    Σίγουρα όμως μου λείπουν τα κόλπα που κάναμε με τον operator = στη C++, ειδικά τον παλιό καλό καιρό όταν μόλις είχαν δημιουργηθεί οι auto_pointer κλάσεις και ο καθένας έφτιαχνε τη δική του, με τις δικές του βελτιώσεις φυσικά!


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  11-12-2007, 14:33 38213 σε απάντηση της 38074

    Απ: Operator=

    Κι εγώ αυτό είχα στο μυαλό μου, ότι με C++ γίνεται, γι αυτό μπερδευόμουνα, ευχαριστώ...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems