Η πιο ουσιαστική διαφορά μεταξύ κλάσης και δομής είναι ότι η κλάση είναι ένας τύπος αναφοράς, ενώ η δομή είναι ένας τύπος τιμής και η κατανομή τους στη μνήμη είναι διαφορετική.
Τι είναι η τάξη;
Η κλάση, μια θεμελιώδης έννοια στον αντικειμενοστραφή προγραμματισμό, είναι ένας τύπος προσαρμοσμένης δομής δεδομένων που συνήθως περιέχει πεδία, χαρακτηριστικά, μεθόδους, χαρακτηριστικά, κατασκευαστές, ευρετήρια, τελεστές κ.λπ. Στο .NET, όλες οι κληρονομούνται τελικά από την κλάση System.Object, επομένως είναι ένας τύπος αναφοράς, δηλαδή, όταν δημιουργείτε νέα παρουσία μιας κλάσης, η διεύθυνση αυτής της παρουσίας στον διαχειριζόμενο σωρό αποθηκεύεται στη στοίβα και η τιμή της παρουσίας αποθηκεύεται στον διαχειριζόμενο σωρό.
Τι είναι η δομή;
Μια δομή είναι ένας τύπος τιμής που χρησιμοποιείται για την οργάνωση ενός συνόλου σχετικών μεταβλητών σε μια ενιαία μεταβλητή οντότητα. Όλες οι δομές κληρονομούνται από την κλάση System.ValueType, επομένως είναι ένας τύπος τιμής, δηλαδή, η παρουσία struct δημιουργείται στη στοίβα όπου έχει εκχωρηθεί το νήμα και αποθηκεύει την ίδια την τιμή. Έτσι, όταν χρησιμοποιούμε το struct, μπορούμε να το αντιμετωπίσουμε ως μια βασική κλάση τύπων όπως int και char.
1. class είναι ο τύπος αναφοράς και structs είναι ο τύπος τιμής
Δεδομένου ότι η κλάση είναι ένας τύπος αναφοράς, η κλάση μπορεί να οριστεί σε null. Αλλά δεν μπορούμε να κάνουμε τη δομή μηδενική επειδή είναι ένας τύπος τιμής.
2. Όταν δημιουργείτε μια τάξη, θα δημιουργηθεί στο σωρό. Και δημιουργείτε μια δομή, η οποία θα δημιουργηθεί στη στοίβα
3. Χρησιμοποιείτε μια αναφορά σε μια παρουσία κλάσης. Και δεν χρησιμοποιείς αναφορά σε δομή. (αντί να τα χρησιμοποιείτε απευθείας)
4. Όταν περνάμε την κλάση ως όρισμα σε μια μέθοδο, περνάμε μια αναφορά. Η δομή μεταβιβάζει μια τιμή, όχι μια αναφορά.
5. Οι δομές δεν μπορούν να έχουν αρχικοποιητές, οι μπορούν να έχουν αρχικοποιητές.
6. Οι μπορούν να έχουν προφανείς κατασκευαστές χωρίς παραμέτρους, αλλά οι δομές δεν μπορούν
7. Η νέα λέξη-κλειδί πρέπει να δημιουργηθεί πριν από τη χρήση της κλάσης και η δομή δεν τη χρειάζεται
8. Η κλάση υποστηρίζει την κληρονομικότητα και τον πολυμορφισμό, η Struct όχι. Σημείωση: Αλλά το Struct μπορεί να υλοποιήσει διεπαφές όπως και οι
9. Δεδομένου ότι το Struct δεν υποστηρίζει κληρονομικότητα, τα μέλη του δεν μπορούν να τροποποιηθούν με προστατευμένο ή προστατευμένο
10. Ο κατασκευαστής του Class δεν χρειάζεται να αρχικοποιήσει όλα τα πεδία και ο κατασκευαστής του Struct πρέπει να αρχικοποιήσει όλα τα πεδία
11. Η κλάση μπορεί να ορίσει έναν καταστροφέα, αλλά η Struct δεν μπορεί
12. Η κλάση είναι κατάλληλη για μεγάλα και πολύπλοκα δεδομένα και η Struct είναι κατάλληλη για νέους τύπους που χρησιμοποιούνται συχνά ως συνδυασμός ορισμένων δεδομένων.
Εφαρμοστέες περιπτώσεις: Το Struct έχει πλεονεκτήματα απόδοσης και το Class έχει πλεονεκτήματα αντικειμενοστρεφούς επέκτασης.
Ο τύπος που χρησιμοποιείται για τον υποκείμενο χώρο αποθήκευσης δεδομένων έχει σχεδιαστεί ως τύπος Struct και ο τύπος που χρησιμοποιείται για τον καθορισμό της συμπεριφοράς της εφαρμογής έχει σχεδιαστεί ως κλάση. Εάν δεν είστε σίγουροι για τη μελλοντική εφαρμογή του τύπου, θα πρέπει να χρησιμοποιήσετε το Class. |