
Primerjalna tabela
Podlaga za primerjavo | Boks | Unboxing |
---|---|---|
Osnovno | Tip objekta se nanaša na vrsto vrednosti. | proces pridobivanja vrednosti iz predmetov v boksu. |
Shranjevanje | Vrednost, shranjena v skladu, se kopira v objekt, shranjen v pomnilniku kopice. | Vrednost objekta, shranjena v pomnilniku kopice, se kopira v tip vrednosti, ki je shranjen v skladu. |
Pretvorba | Implicitna pretvorba. | Eksplicitna pretvorba. |
Primer | int n = 24; objekt ob = n; | int m = (int) ob; |
Definicija boksa
Boks je postopek pretvorbe vrste vrednosti v tip objekta. Tukaj je tip vrednosti shranjen v skladu in tip objekta je shranjen v pomnilniku kopice. Ta pretvorba vrste vrednosti v tip objekta je implicitna pretvorba. Objektu lahko neposredno dodelite vrednost, C # pa bo obravnaval ostalo konverzijo. Spoznajmo boks s primerom.

int i = 24; objekt ob = i; // Vnesemo celo število tipa n v tip objekta ob. ali predmet ob1 = 21; // Tukaj se tudi tip objekta ob1 nanaša na celoštevilčni tip
V zgornji kodi je celoštevilčni tip i, ki vsebuje vrednost 24, shranjen v skladu in se kopira v tip objekta ob. Tip objekta se zdaj nanaša na celo število. Sedaj vsebina »int i« vsebuje tudi vrednost 24 in »tip objekta ob« vsebuje tudi vrednost 24, vendar sta obe vrednosti neodvisni drug od drugega, tj. Če spremenite vrednost i, ne bo odražala spremembe v vrednost ob.
Boks porabi dodaten spomin skupaj z dodatnim časom. Razlog za to je, da mora nov objekt, ki se bo nanašal na tip vrednosti, dodeliti pomnilniški prostor na kopici. Nato se vrednost vrste vrednosti, ki je shranjena v skladu, prenese v ob objektni tip, na mesto pomnilnika kopice.
Opredelitev Unboxinga
Obrnjenje Boxinga je Unboxing. Unboxing je pretvorba tipa objekta v tip vrednosti. V Unboxingu se vrednost boksiranega tipa objekta, ki je shranjena na kopici, prenese na vrednost, ki je shranjena v skladu. Za razliko od Boxinga je treba Unboxing izvesti izrecno. Tip objekta je izrecno oddan v tip vrednosti, tip vrednosti pa mora biti enak vrednosti, na katero se nanaša tip objekta. Razumimo pojem Unboxinga s primerom.

int i = 24; objekt ob = i; // Vnesemo celo število tipa n v tip objekta ob. int j = (int) ob; // Unbox vrednost celega števila, ki je shranjena v tipu objekta ob do integer tipa y.
Vrednost, shranjena v predmetu ob, se pridobi tako, da jo vrnemo v tip, ki je enak kot objekt, ki se nanaša na tj. Celo število tipa "j".
Unboxing porabi tudi več pomnilnika in več časa. Ker, ko mora biti tip objekta odstranjen, je treba vrednost tipa objekta, ki je shranjena v kopici, prenesti v novo vrsto vrednosti, shranjeno v skladu. Tip objekta, katerega vrednost je bila pridobljena, bo zdaj na voljo za zbiranje smeti.
Ključne razlike med boksom in unboxingom
- Pri boksu se objekt nanaša na vrsto vrednosti. Po drugi strani pa se proces pridobivanja vrednosti nazaj iz zaokroženega predmeta imenuje unboxing.
- Tip vrednosti, shranjen v skladu, se kopira v objekt, shranjen v pomnilniku kopice. Po drugi strani pa se pri unboxingu objekt, shranjen v pomnilniku kopice, kopira v tip vrednosti, ki je shranjen v pomnilniku skladov.
- Boxing je implicitna konverzija, medtem ko je unboxing izrecna konverzija.
Sklep:
Tako boks in unboxing porabita več časa in pomnilnika in sta računsko draga. Prav tako jim manjka tipska varnost in povečuje režijske stroške. Vedno je priporočljivo, da se izogibate preveč uporabe boksa in unboxinga v programu.