GrMikeD Δημοσ. 17 Ιουνίου 2005 Δημοσ. 17 Ιουνίου 2005 to apotelesma einai 1050 ektos ama i C# akolouthei to diko tis montelo. Ama thimamai kala ta struct stin C# einai isodunama me klaseis?
GrMikeD Δημοσ. 17 Ιουνίου 2005 Δημοσ. 17 Ιουνίου 2005 Xmmm...., telika ontws exoun diafora... Apo to MSDN: Structs vs. Classes Structs may seem similar to classes, but there are important differences that you should be aware of. First of all, classes are reference types and structs are value types. By using structs, you can create objects that behave like the built-in types and enjoy their benefits as well. Opote, paramenei anepafi i timi.... Pantws einai ligo parakseno pou se afinei i glwssa na kaneis implement ena interface...
bandito Δημοσ. 17 Ιουνίου 2005 Δημοσ. 17 Ιουνίου 2005 H απάντηση ειναι , οτι λόγω boxing (που αναφέρθηκε ώς πλεονέκτημα), το c "αντιγράφεται" και δεν ειναι το πραγματικό c. Αρα η αλλαγή γινεται στο αντίγραφο οποτε παραμένει 1000.
Skeftomilos Δημοσ. 18 Ιουνίου 2005 Μέλος Δημοσ. 18 Ιουνίου 2005 Φοβερό quiz bandito! Πραγματικά πολύ χρήσιμο να το ξέρει κανείς. :grin: Θα πω τώρα μια γνώμη που μπορεί να είναι και λάθος. Μία οντότητα όπως Employee ή Clerk πρέπει να είναι Class και όχι Struct. Υποψήφιες για Struct είναι αυτές που ονομάζω "σύνθετες τιμές", για παράδειγμα το Color. Ένα χρώμα αποτελείται από συντελεστές RGB (Red, Green, Blue), και μπορεί να έχει και άλλες παραγόμενες ιδιότητες όπως Brightness, Hue και Saturation. Αν όμως έχουμε δύο αντικείμενα με ιδιότητα "Χρώμα", ακόμα κι αν έχουν το ίδιο χρώμα (π.χ. κόκκινο) δεν έχει νόημα να μοιράζονται την ίδια τιμή δι αναφοράς. Σε αυτή την περίπτωση αν αλλάζαμε το χρώμα του ενός αντικειμένου ( Object1.Color.Brightness += 10; ) θα άλλαζε και το χρώμα του άλλου, κάτι που δε θέλουμε προφανώς. Άλλες σύνθετες τιμές κατάλληλες για Struct είναι τα Size, Point και Rectangle. Κατά τη γνώμη μου και το Font είναι καλός υποψήφιος για Struct αλλά η Microsoft προτίμησε να το κάνει Class, ίσως για compatibility με τη VB6.
hayzel Δημοσ. 18 Ιουνίου 2005 Δημοσ. 18 Ιουνίου 2005 Αν όμως έχουμε δύο αντικείμενα με ιδιότητα "Χρώμα", ακόμα κι αν έχουν το ίδιο χρώμα (π.χ. κόκκινο) δεν έχει νόημα να μοιράζονται την ίδια τιμή δι αναφοράς. .... κάτι που δε θέλουμε προφανώς. Υπάρχουν στιγμές που το θέλουμε. Ανάλογα με το τι θέλουμε να φτιάξουμε. Anyway κατά τη γνώμη μου είναι χαζό να χρησιμοποιούμε structs όταν υπάρχουν τα classes.
Skeftomilos Δημοσ. 20 Ιουνίου 2005 Μέλος Δημοσ. 20 Ιουνίου 2005 Χμ, έχεις ένα δίκιο. Ο garbage collector είναι ταχύτατος και μπορεί να "μαζεύει" εκατοντάδες χιλιάδες αντικείμενα το δευτερόλεπτο, επομένως αν θέλει κανείς μπορεί να χρησιμοποιεί παντού αντικείμενα χωρίς πολλές τύψεις. Καμία σχέση με τη VB6 με memory management μαύρο χάλι. :neutral:
hayzel Δημοσ. 21 Ιουνίου 2005 Δημοσ. 21 Ιουνίου 2005 Άσε που αποδεδειγμένα οι καινούργιοι compilers (gcc) μικρά σε δομή classes τα μετατρέπουν κατά το compile σε inline κώδικα οπότε η πτώση ταχύτητας απλά δεν υπάρχει. Ακόμη και αν χρησιμοποιείς γλώσσα με vm (Java,C# ... ) όπως ήδη είπες το garbage collection για μικρά classes είναι πολύ γρήγορο.
hayzel Δημοσ. 21 Ιουνίου 2005 Δημοσ. 21 Ιουνίου 2005 Για παράδειγμα σου λέω ότι σε ένα project (C++) είχα ένα class που είχε 2-3 parent classes και έκανε πάρα πολλούς υπολογσιμούς (100% CPU). Περίμενα μεγάλη πτώση της ταχύτητας υπολογισμών λόγω εκτέλεσης και διαχείρισης μιας τεράστιας λίστας objects του class αυτού. Εντυπωσιάστηκα με την ταχήτυτα... δεν το περίμενα... μπορούσε να αρχικοποιήσει 300000 objects το δευτερόλεπτο σε έναν PIII 933 !!! O αρχικός κώδικας που είχε γραφτεί για τους υπλογισμούς ήταν procedural πάνω σε μια λίστα με new /delete structs, έβγαζε τα ίδια νούμερα!
bandito Δημοσ. 21 Ιουνίου 2005 Δημοσ. 21 Ιουνίου 2005 Για παράδειγμα σου λέω ότι σε ένα project (C++) είχα ένα class που είχε 2-3 parent classes και έκανε πάρα πολλούς υπολογσιμούς (100% CPU). Περίμενα μεγάλη πτώση της ταχύτητας υπολογισμών λόγω εκτέλεσης και διαχείρισης μιας τεράστιας λίστας objects του class αυτού. Εντυπωσιάστηκα με την ταχήτυτα... δεν το περίμενα... μπορούσε να αρχικοποιήσει 300000 objects το δευτερόλεπτο σε έναν PIII 933 !!!O αρχικός κώδικας που είχε γραφτεί για τους υπλογισμούς ήταν procedural πάνω σε μια λίστα με new /delete structs' date=' έβγαζε τα ίδια νούμερα![/quote'] Δεν κάνουν και τιποτα μαγικό οι compilers. Και οι κλάσεις σε επίπεδο compiler δεν ειναι τιποτα μαγικό. Ανάλογα με το case το new μπορεί να είναι φτηνότερο απο το malloc, και τούμπαλιν. Αν κάτι μπορεις να το κάνεις με malloc / realloc (αν μπορεις, δεν ειναι πάντα ευκολο) η ταχύτητα θα ειναι σιγουρα καλυτερη. @skeftomilos ... VB6 με memory management ... Την ποια;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.