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

 

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

Γιατί properties?

Îåêßíçóå áðü ôï ìÝëïò JohnL. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 17-11-2007, 21:26. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-11-2007, 01:34 37267

    Γιατί properties?

    Απότι έχω καταλάβει, συνήθως σε κλάσεις χρησιμοποιούνται properties, λόγω των περισσότερων δυνατοτήτων που παρέχουν.

    Σε περίπτωση όμως που θέλω μια μεταβλητη η οποία είναι readable & writable, δε χρειάζεται έλεγχο ορθότητας, και είναι μια τιμή που δεν ορίζεται από κάποια εσωτερική διαδικασία της κλάσης, δεν είναι το ίδιο να χρησιμοποιήσω απλούστερα μία public variable?
  •  15-11-2007, 23:50 37361 σε απάντηση της 37267

    Απ: Γιατί properties?

    Νομίζω οτι με τη συγκριση σου ξεφεύγεις πολύ.Άλλη η δουλειά των properties μιας κλάσης και άλλη η δουλειά μιας μεταβλήτης. Δεν νομίζω οτι είπε κάποιος πως για να αλλάζουμε τιμές καθώς και να παίρνουμε πίσω τις τιμές αυτές να χρησιμοποιούμε κλάσεις.Σίγουρα σε αυτην τη περίπτωση η απλή χρήση της παλιάς καλής μεταβλητής είναι πιο ευχρηστή.

    Νομίζω πως πρέπει να ξεκαθαρίσεις στο μυαλό σου τα properties μιας κλάσης με τις μεταβλητές.

    Ενας καλός τρόπος τακτοποιημένων μεταβλητών τις οποίες θέλουμε να χρησιμοποιήσουμε για τον λόγο που προανέφερες δλδ read and write ειναι τα structures

    πχ

    Structure Person

    Dim name as string

    Dim Lastname as string

    Dim age as integer

    End Structure

     

     

    dim Addperson as new Person '(Οπου αναφέρεται στο structure που έφτιαξες πριν)

    Person.name = "Givrgos"

    Person.Lastname = "Gevrgiou"

    Person.age = 20

    Messagebox.Show .....................


    Αυτοί που ζουν γενναίοι είναι ενάρετοι,κάνουν ένδοξες πράξεις και πέθαινουν αιώνια ξακουστοί....
    Μ.Αλέξανδρος...IV Crusade...
  •  16-11-2007, 00:08 37362 σε απάντηση της 37361

    Απ: Γιατί properties?

    Αυτά τα οποία συγκρίνω:

    a) Κλάση με properties:

    Public Class Person
        Private _name As String
        Private _lastname As String

        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
                _name = value
            End Set
        End Property

        Public Property LastName() As String
            Get
                Return _lastname
            End Get
            Set(ByVal value As String)
                _lastname = value
            End Set
        End Property
    End Class


    b) Κλάση με public variables:

    Public Class Person
        Public Name As String
        Public LastName As String
    End Class


    Και τα δύο χρησιμοποιούνται με τον ίδιο τρόπο και επιστρέφουν ίδιο αποτέλεσμα.

    Dim newPerson As New Person
    newPerson.Name = "Giwrgos"
    newPerson.LastName = "Gewrgiou"
    ...

    Υπάρχει κάποια διαφορά?
  •  16-11-2007, 01:19 37364 σε απάντηση της 37362

    Απ: Γιατί properties?

    Στο αποτέλεσμα οχι, δεν υπάρχει διαφορά.

    Ομως, το να πούμε για δύο προσεγγίσεις οτι εφόσον δεν υπάρχει διαφορά στο αποτέλεσμα είναι ισοδύναμες, είναι σαν να εξισώνουμε τα "σεντόνια" κώδικα με τη χρήση abstraction, encapsulation, design patterns και τα ρέστα μόνο και μονο επειδή τελικά "το αποτέλεσμα είναι ιδιο".

    Ενας λόγος που τα properties χρησιμοποιούνται είναι γιατί είναι εύκολο να "περάσει" κανείς σε ένα πιό περίπλοκο design, αν του χρειαστεί, οπου στο get/set των properties θα συμβαίνουν αρκετά πράγματα, ενώ με τα public members θα χρειαστεί αρκετό rewriting.

    Ενας άλλος λόγος, από ο,τι φαίνεται είναι το πώς "ακούει" το reflection.

    Περισσότερα μπορείς να βρεις και εδώ: http://www.codinghorror.com/blog/archives/000654.html


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  16-11-2007, 01:22 37365 σε απάντηση της 37362

    Απ: Γιατί properties?

    Υπάρχει πολύ μεγάλη διαφορά. Μερικά πολύ σημαντικά σημεία:

    • Τα properties μπορούν να γίνουν override σε κάποια child class, τα fields όχι.
    • Όταν η κλάση γίνεται serialize τα properties σώζονται αυτόματα, τα fields όχι.
    • Μπορείς να χρησιμοποιήσεις databinding για να συνδέσεις controls mε properties, όχι mε fields

    Γενικά, τα fields θεωρούνται στο framework ως κομμάτι του implementation της κλάσης, ακόμα και όταν είναι public.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  16-11-2007, 10:42 37372 σε απάντηση της 37365

    Απ: Γιατί properties?

    Λοιπόν, ειδικά με το serialization δεν το ήξερα! (Ισως γιατί ποτέ δεν έχω χρησιμοποιήσει fields).

    Νομίζω οτι πλέον έχουμε επιχειρήματα υπέρ των properties. Το override ήταν αυτονόητο, και απορώ γιατί δεν είναι το πρώτο πράγμα που σκεφτόμαστε όλοι. Βρε λες ακόμα να σκεφτόμαστε με την procedural λογική; :)


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  17-11-2007, 20:47 37484 σε απάντηση της 37372

    Απ: Γιατί properties?

    Κι όμως, serialization (σε XML τουλάχιστον) γίνεται και με fields Stick out tongue

    Πάντως από ότι βλέπω για απλές υλοποιήσεις δεν είναι απαραίτητα τα properties, απλά βολεύει να υπάρχουν από την αρχή για μελλοντική επέκταση του κώδικα.. Όχι ότι αυτό δεν είναι σημαντικο!
  •  17-11-2007, 21:26 37487 σε απάντηση της 37484

    Απ: Γιατί properties?

    Άλλο το ότι γίνεται προσθέτοντας τα κατάλληλα attributes και άλλο το ότι η default συμπεριφορά θεωρεί τα fields απλά implementation. Ακόμα και στις απλούστερες υλοποιήσεις είναι προτιμότερο να χρησιμοποιείς properties. Έκτός και αν γράφεις demo κώδικα για βιβλία ή άρθρα, πρέπει να προτιμήσεις τα properties από τα fields. Από τη μία έχεις το inheritance: τα πεδία δημιουργούν πρόβλημα. Έχεις και το encapsulation: αν αλλάξεις ένα field, πρέπει να αλλάξεις και όσους το καλούνε. Με ένα property μπορείς να κάνεις αλλαγές εσωτερικά και να μην τις καταλάβει κανείς.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems