Προς το περιεχόμενο

Ερωτήσεις για C#


migf1

Προτεινόμενες αναρτήσεις

Για σενα ειναι οχι για αλλους. Αν θες μια μεταβληγη ή μεθοδος να μην μπορεις να την καλεσεις απο το ινστανς, τοτε την κανεις private. Το γιατι δεν θες να την καλεσεις απο αλλου, ειναι αλλο θεμα που θα το καταλαβεις πιο μετα. Για την ωρα να ξερειε πωσ εαν καλεσεις μεθοδο απο το ινστανς και αυτη ειναι private, tote exeis error.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 51
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Μα δεν τον περιοριζεις.

Απλα του προσφερεις εμμεσες μεθοδους προσβασης τους.

Μπορεις να εχεις σε καθε στοιχειο μια getter και μια setter που το μονο που θα κανουν ειναι να επιστρεφουν και να εκχωρουν την τιμη αυτουσια. Δηλαδη αντι να γραφεις name = "Chris"; θα γραφεις name = setName("Chris");.

Αλλαζει κατι; Προφανως οχι, αλλα στην δευτερη περιπτωσει μπορεις να προσθεσεις παραμετρους. Π.χ το string να μην εχει αριθμους ή κατι αλλο και να επιστρεφει καποιο exception. Αυτο σε διευκολυνει απο το να το ελεγχεις καθε φορα οταν κανεις αμεσα την εκχωρηση τιμης.

 

Αν το αρχειο σου βρισκεται καπου τοπικα θα πρεπει να του δωσεις ολον τον κωδικα.

Αν ομως ειναι σε καποιο πακετο σε καποιο δικτυο οπως αυτα που κανεις import εσυ θα εχεις προσβαση μονο στην κλαση και θα βλεπεις ΜΟΝΟ τα public στοιχεια δεν θα ξερεις καν αν και τι μεταβλητες και γενικα τον τροπο υλοποιησης της κλασης.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ωραία παιδιά εντάξει σας ευχαριστώ, σαν να την κατάλαβα, είδα και αυτό το παράδειγμα 

http://www.completecsharptutorial.com/basic/understanding-concepts/ και σαν να μπήκα στο νόημα.

 

Τώρα που το σκέφτομαι είναι σαν τις συναρτήσεις, απλά τις φτιάχνεις λες τη θέλεις να κάνουν και μετά τις καλείς και η μόνη διαφορά είναι στην "ορατότητα".

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το νόημα του encapsulation δεν είναι να έχεις set/get για κάθε field. Αν ήταν έτσι προφανώς και θα οριζες τα fields σου public και θα ξεμπερδευες.

 

Το βασικό που πρέπει να καταλάβεις είναι πως θα κρύβεις το implememtation της κάθε κλασσης και θα παρεχεις μόνο public μεθόδους που θα κάνουν αυτό που θες.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Γεια σας, ασχολούμαι με την C# και έχω κάποιες ερωτήσεις - απορίες. Μαθαίνω τη γλώσσα από εδώ: http://www.tutorialspoint.com/csharp/  είναι καλή σελίδα ? Ποια προτείνετε εσείς ?

 

Έχω προχωρήσει πολύ μακριά αλλά εδώ --> C# - Encapsulation έχω μια απορία, την ενθυλάκωση γιατί πρέπει να την χρησιμοποιούμε ?

 

Δηλ τι να κρύψω - προστατεύσω ?

 

Ευχαριστώ εκ των προτέρων

 

 

Για πολλούς και διάφορους λόγους.

Τι κάνεις με την ενθυλάκωση ? Παίρνεις κάποια πράγματα και τα ομαδοποιείς επιλέγοντας τι θα είναι φανερό και τι κρυφό.

 

* Φτιάχνοντας ένα ονομαστό σύνολο κώδικα, είτε είναι μέθοδος, είτε κλάση, ή ότιδήποτε, κάθε φορά που θα θες να χρησιμοποιήσεις τον ίδιο κώδικα, απλά θα γράφεις το όνομα και τον καλείς. Αντί να κάνεις copy paste και τέτοια ας πούμε.

 

* Θα θες να 'κρύψεις' μέρος του κώδικα για πολλούς λόγους. Πρώτα απ' όλα για εσένα. Γιατί όσο μεγαλώνει το project σου τόσο πιο κουραστικό θα γίνεται να κάνεις scroll. Ή και για να μη γίνει διένεξη μεταξύ μερών που δεν θα έπρεπε ποτέ να συσχετιστούν κάπως.

 

* Σκέφτηκες ότι μπορεί δύο ή περισσότερα μέρη του προγράμματος σου να έχουν μεθόδους με το ίδιο όνομα ; Έχοντας τα  σε κλάσεις θα μπορείς να ξεχωρίσεις ποια μέθοδος από όλες με το ίδιο όνομα είναι για τι. Έχω ας πούμε ένα project του οποίου το κεντρικό παράθυρο αποτελείται από 8 αντικείμενα - στοιχεία GUI. Κάποια στοιχεία ανανεώνονται αυτόνομα, και άλλες φορές πρέπει να ανανεωθούν όλα μαζί. Έχω βάλει στο καθένα λοιπόν μια μέθοδο Refresh, και όλες τις refersh σε μια μέθοδο του Main Window, και τις έχω βάλει ανάλογα τα events να δουλεύουν. Για φαντάσου να μην υπήρχε ενθυλάκωση. Ένας χαμός θα γινόταν.

Επεξ/σία από Alithinos
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γεια σας, ασχολούμαι με την C# και έχω κάποιες ερωτήσεις - απορίες. Μαθαίνω τη γλώσσα από εδώ: http://www.tutorialspoint.com/csharp/  είναι καλή σελίδα ? Ποια προτείνετε εσείς ?

 

Έχω προχωρήσει πολύ μακριά αλλά εδώ --> C# - Encapsulation έχω μια απορία, την ενθυλάκωση γιατί πρέπει να την χρησιμοποιούμε ?

 

Δηλ τι να κρύψω - προστατεύσω ?

 

Ευχαριστώ εκ των προτέρων

 

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

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...