Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ του εγκιβωτισμού και της unboxing στο C #

Στο C #, όλοι οι τύποι τιμών προέρχονται από το αντικείμενο κατηγορίας. Έτσι, μια μεταβλητή αναφοράς του αντικειμένου τύπου μπορεί να αναφέρεται σε οποιοδήποτε άλλο τύπο τιμής. Το C # εισάγει δύο μεθόδους για το Boxing and Unboxing, το οποίο συνδέει τον τύπο τιμής με τον τύπο αναφοράς. Η βασική διαφορά μεταξύ Boxing και Unboxing είναι ότι το Boxing είναι η μετατροπή του τύπου αξίας σε έναν τύπο αντικειμένου, ενώ σε άλλα χέρια ο όρος Unboxing αναφέρεται στη μετατροπή του τύπου αντικειμένου στον τύπο τιμής. Ας δούμε τις άλλες διαφορές μεταξύ Boxing και Unboxing.

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΠυγμαχίαΑποσύνδεση
ΒασικόςΟ τύπος αντικειμένου αναφέρεται στον τύπο τιμής.διαδικασία ανάκτησης αξίας από το αντικείμενό του σε πλαίσιο.
ΑποθήκευσηΗ τιμή που αποθηκεύεται στη στοίβα αντιγράφεται στο αντικείμενο που είναι αποθηκευμένο στη μνήμη σωρού.Η τιμή του αντικειμένου που είναι αποθηκευμένη στη μνήμη σωρού αντιγράφεται στον τύπο τιμής που έχει αποθηκευτεί στη στοίβα.
ΜετατροπήΤυπική μετατροπή.Αυξημένη μετατροπή.
Παράδειγμαint n = 24;
αντικείμενο ob = n;
int m = (int) ob.

Ορισμός του εγκιβωτισμού

Ο εγκιβωτισμός είναι μια διαδικασία μετατροπής ενός τύπου τιμής σε έναν τύπο αντικειμένου. Εδώ, ο τύπος τιμής αποθηκεύεται στη στοίβα και ο τύπος αντικειμένου αποθηκεύεται στη μνήμη σωρού. Αυτή η μετατροπή του τύπου τιμής στον τύπο αντικειμένου είναι μια σιωπηρή μετατροπή. Μπορείτε να αντιστοιχίσετε απευθείας μια τιμή σε ένα αντικείμενο και το C # θα χειριστεί την υπόλοιπη μετατροπή. Ας καταλάβουμε το Boxing με ένα παράδειγμα.

 int i = 24; αντικείμενο ob = i; // Πιέστε τον ακέραιο τύπο n στον τύπο αντικειμένου ob. ή αντικείμενο ob1 = 21; // εδώ επίσης ένας τύπος αντικειμένου ob1 αναφέρεται σε έναν ακέραιο τύπο 

Στον παραπάνω κώδικα, ο ακέραιος τύπος i που περιέχει την τιμή 24 αποθηκεύεται στη στοίβα και αντιγράφεται στον τύπο αντικειμένου ob. Ένας τύπος αντικειμένου αναφέρεται τώρα σε μια ακέραια τιμή. Τώρα, το "int i" περιέχει επίσης την τιμή 24 και ο "τύπος αντικειμένου ob" περιέχει επίσης την τιμή 24, αλλά και οι δύο τιμές είναι ανεξάρτητες η μία από την άλλη, δηλαδή αν αλλάξετε την τιμή του i, δεν θα αντικατοπτρίζει την αλλαγή στο αξία του ob.

Ο εγκιβωτισμός καταναλώνει επιπλέον μνήμη μαζί με επιπλέον χρόνο. Ο λόγος είναι ότι ένα νέο αντικείμενο, το οποίο θα αναφέρεται στον τύπο τιμής, πρέπει να διαθέτει τον χώρο μνήμης στον σωρό. Στη συνέχεια, η τιμή του τύπου τιμής που είναι αποθηκευμένη στη στοίβα θα μεταφερθεί στον ob του τύπου αντικειμένου, στη θέση μνήμης σωρού.

Ορισμός του Unboxing

Η οπίσθια όψη του Boxing είναι Unboxing. Η Unboxing είναι μια μετατροπή του τύπου αντικειμένου στον τύπο τιμής. Στην Unboxing η τιμή του τύπου αντικειμένων που είναι αποθηκευμένα στον σωρό μεταφέρεται στον τύπο τιμής που είναι αποθηκευμένος στη στοίβα. Σε αντίθεση με τον εγκιβωτισμό, η Unboxing πρέπει να γίνει ρητά. Ο τύπος αντικειμένου μεταδίδεται ρητά στον τύπο τιμής και ο τύπος τιμής πρέπει να είναι ίδιος με τον τύπο με τον οποίο αναφέρεται ο τύπος αντικειμένου. Ας καταλάβουμε την έννοια της Unboxing με ένα παράδειγμα.

 int i = 24; αντικείμενο ob = i; // Πιέστε τον ακέραιο τύπο n στον τύπο αντικειμένου ob. int j = (int) ob. // Unbox την τιμή ακέραιας που είναι αποθηκευμένη στον τύπο αντικειμένου ob σε ακέραιο τύπο y. 

Η τιμή που αποθηκεύεται στο αντικείμενο ob ανακτάται μεταφέροντάς την στον ίδιο τύπο με τον οποίο αναφέρεται το αντικείμενο, δηλ. Τον ακέραιο τύπο "j".

Το Unboxing καταναλώνει επίσης περισσότερη μνήμη και περισσότερο χρόνο. Δεδομένου ότι, όταν ένας τύπος αντικειμένου πρέπει να είναι unboxed τότε η τιμή του τύπου αντικειμένου που αποθηκεύεται στον σωρό πρέπει να μεταφερθεί στον νέο τύπο τιμής που είναι αποθηκευμένος στη στοίβα. Ο τύπος αντικειμένου του οποίου η τιμή που έχει ανακτηθεί θα είναι πλέον διαθέσιμη για συλλογή απορριμμάτων.

Βασικές διαφορές μεταξύ του Boxing και της Unboxing

  1. Στην πυγμαχία, γίνεται ένα αντικείμενο που αναφέρεται ως τύπος τιμής. Από την άλλη πλευρά, η διαδικασία ανάκτησης της τιμής πίσω από το αντικείμενό του σε πλαίσιο ονομάζεται unboxing.
  2. Ένας τύπος τιμής αποθηκευμένος σε μια στοίβα αντιγράφεται στο αντικείμενο που είναι αποθηκευμένο στη μνήμη σωρού. Από την άλλη πλευρά, κατά την unboxing, ένα αντικείμενο αποθηκευμένο στη μνήμη σωρού αντιγράφεται σε έναν τύπο τιμής που είναι αποθηκευμένος στη μνήμη στοίβας.
  3. Ο εγκιβωτισμός είναι μια σιωπηρή μετατροπή, ενώ η unboxing είναι μια ρητή μετατροπή.

Συμπέρασμα:

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

Top