
Võrdluskaart
Võrdluse alus | Poks | Lahtipakkimine |
---|---|---|
Põhiline | Objekti tüüp viitab väärtuse tüübile. | väärtuse allalaadimise protsess pakitud objektist. |
Ladustamine | Korstnale salvestatud väärtus kopeeritakse hunnimällu salvestatud objektile. | Kogu mällu salvestatud objekti väärtus kopeeritakse virnale salvestatud väärtuse tüübile. |
Konversioon | Kaudne konversioon. | Selge konversioon. |
Näide | int n = 24; objekt ob = n; | int m = (int) ob; |
Pokside mõiste
Poks on protseduur, mis muudab väärtustüübi objekti tüübiks. Siin salvestatakse väärtuse tüüp virnale ja objekti tüüp salvestatakse hunnimällu. See väärtustüübi konverteerimine objekti tüübiks on kaudne konversioon. Saate objektile otse väärtuse määrata ja C # tegeleb ülejäänud konversiooniga. Mõelgem näiteks poksist.

int i = 24; objekt ob = i; // Laadige täisarvu n tüüp objektitüüpi ob. või objekt ob1 = 21; // siin ka objekti tüüp ob1 viitab täisarvule
Ülaltoodud koodis salvestatakse virnale täisarvu tüüp i, mis sisaldab väärtust 24, ja see kopeeritakse objekti tüübile ob. Objekti tüüp viitab nüüd täisarvule. Nüüd sisaldab "int i" ka väärtust 24 ja "objekti tüüp ob" sisaldab ka väärtust 24, kuid mõlemad väärtused on teineteisest sõltumatud, st kui muudate i väärtust, ei kajasta see muutust väärtus ob.
Poksimine tarbib lisamälu koos lisaaega. Põhjuseks on see, et uus objekt, mis viitab väärtuse tüübile, peab jaotama mälupinna hunnikule. Järgmisena kantakse stackile salvestatud väärtuse tüübi väärtus objektile, mis on kasumimälu asukohas.
Unboxingu määratlus
Poks on vastupidine. Unboxing on objekti tüübi konverteerimine väärtuse tüübiks. Aastal Unboxing (kasti lahtrisse) kantakse kuhjaga salvestatud kastitud objekti tüüp väärtusele, mis salvestatakse virnale. Erinevalt poksist tuleb Unboxing'i teha selgesõnaliselt. Objekti tüüp on selgesõnaliselt väärtuse tüübile ja väärtuse tüüp peab olema sama, mis objektitüübi väärtus. Mõistame Unboxing'i mõiste näidisega.

int i = 24; objekt ob = i; // Laadige täisarvu n tüüp objektitüüpi ob. int j = (int) ob; // Laadige objektivormis ob salvestatud täisarv väärtusest y täisarv.
Objektis ob salvestatud väärtus leitakse, valides selle samale tüübile, nagu objekt viitas täisarvule “j”.
Lahtipakkimine tarbib ka rohkem mälu ja rohkem aega. Kuna, kui objektitüüp peab olema kastimata, tuleb künnisele salvestatud objekti tüübi väärtus üle kanda asetatud uuele väärtustüübile. Objekti tüüp, mille väärtus on saadud, on nüüd prügi kogumiseks saadaval.
Peamised erinevused poksi ja lahtipakkimise vahel
- Poksimises nimetatakse objekti väärtuseks. Teisest küljest nimetatakse väärtuse tagastamise protsess kastiobjektist unboxingiks.
- Korstnale salvestatud väärtuse tüüp kopeeritakse hunnimällu salvestatud objektile. Teisest küljest kopeeritakse lahtipakkimise ajal hunnimällu salvestatud objekt väärtusele, mis on salvestatud korstnasse.
- Poks on kaudne konversioon, samas kui unboxing on selge konversioon.
Järeldus:
Nii poks kui unboxing tarbivad rohkem aega ja mälu ning need on arvutuslikult kallid. Neil puudub ka tüübiturvalisus ja see suurendab käitusaja kulusid. Alati on soovitatav vältida liigset poksimise ja lahtipakkimise kasutamist programmis.