Άκουγα πρόσφατα ένα 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