Soovitatav, 2020

Toimetaja Valik

Erinevus poksi ja lahtipakkimise vahel C #

C # puhul on kõik väärtustüübid tuletatud klassiobjektist. Niisiis võib tüübi objekti viitemuutuja viidata mis tahes muule väärtuse tüübile. C # tutvustab Boxing and Unboxingile kahte meetodit, mis seob väärtuse tüübi viitega tüübile. Peamine erinevus poksimise ja lahtipakkimise vahel on see, et poks on väärtustüübi konverteerimine objektitüübiks, samas kui teisel käel tähendab mõiste Unboxing objekti tüübi konverteerimist väärtuse tüübiks. Uurige teisi Boxing'i ja Unboxingu vahelisi erinevusi.

Võrdluskaart

Võrdluse alusPoksLahtipakkimine
PõhilineObjekti tüüp viitab väärtuse tüübile.väärtuse allalaadimise protsess pakitud objektist.
LadustamineKorstnale salvestatud väärtus kopeeritakse hunnimällu salvestatud objektile.Kogu mällu salvestatud objekti väärtus kopeeritakse virnale salvestatud väärtuse tüübile.
KonversioonKaudne konversioon.Selge konversioon.
Näideint 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

  1. Poksimises nimetatakse objekti väärtuseks. Teisest küljest nimetatakse väärtuse tagastamise protsess kastiobjektist unboxingiks.
  2. 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.
  3. 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.

Top