Erinevus poksi ja boksiboksi vahel C # -s
Sisu
C #-s on kõik väärtuse tüübid tuletatud klassiobjektist. Niisiis võib tüübiobjekti referentsmuutuja viidata mis tahes muule väärtuse tüübile. C # tutvustab kahte meetodit Boxing ja Unboxing, mis seob väärtuse tüübi viitetüübiga. Põhiline erinevus boksi ja kasti vahel on see, et poksimine on väärtuse tüübi teisendamine objektitüübiks, samas kui teistes kätes tähendab termin Unboxing objekti tüübi teisendamist väärtuse tüübiks. Uurime teisi poksi ja poksimise erinevusi.
- Võrdlusdiagramm
- Definitsioon
- Peamised erinevused
- Järeldus
Võrdlusdiagramm
Võrdluse alus | Poks | Unboxing |
---|---|---|
Põhiline | Objekti tüüp viitab väärtuse tüübile. | kasti lisatud objektist väärtuse leidmise protsess. |
Ladustamine | Virnas salvestatud väärtus kopeeritakse hunnikmälus talletatud objekti. | Hunnimällu salvestatud objektide väärtus kopeeritakse virnas talletatud väärtuse tüübile. |
Teisendus | Kaudne muundamine. | Selgesõnaline teisendus. |
Näide | int n = 24; objekt ob = n; | int m = (int) ob; |
Poksi mõiste
Boksimine on väärtuse tüübi objekti tüübiks teisendamise protseduur. Väärtuse tüüp salvestatakse siin virna ja objekti tüüp hunniku mällu. Väärtuse tüübi teisendamine objektitüübiks on kaudne teisendus. Saate objektile otse väärtuse määrata ja ülejäänud osa teisendamisega tegeleb C #. Saame aru poksist näitega.
int i = 24; objekt ob = i; // Lahutage täisarv tüüp objektitüüpi ob. või objekt ob1 = 21; // siin viitab ka objektitüüp ob1 täisarvutüübile
Ülaltoodud koodi korral salvestatakse täisarv i väärtusega 24 väärtuses virna ja kopeeritakse objektitüüpi ob. Objekti tüüp viitab nüüd täisarvule. Nüüd sisaldab “int i” ka väärtust 24 ja “objekti tüüp ob” ka väärtust 24, kuid mõlemad väärtused on üksteisest sõltumatud, st kui muudate i väärtust, ei kajasta see muutust väärtuses i ob väärtus
Poks kulutab koos lisaajaga ka mälu. Põhjus on see, et uus objekt, mis viitab väärtuse tüübile, peab eraldama mäluruumi hunnikus. Järgmisena kantakse virnasse salvestatud väärtuse tüüp üle objektiobjekti tüübile, hunniku mälu asukohta.
Kasti tühjendamise määratlus
Poksi tagakülg on kasti eemaldamine. Kasti eemaldamine on objekti tüübi teisendamine väärtuse tüübiks. Rakenduses Unboxing kantakse hunnikus salvestatud kasti objektitüübi väärtus väärtuse tüübile, mis salvestatakse virnas. Erinevalt poksist peab boksi eemaldamine toimuma selgesõnaliselt. Objektitüüp valatakse selgesõnaliselt väärtuse tüübile ja väärtuse tüüp peab olema sama kui väärtus, millele objekti tüüp viitab. Saame aru näitest lahtirebimise kontseptsioonist.
int i = 24; objekt ob = i; // Lahutage täisarv tüüp objektitüüpi ob. int j = (int) ob; // Tühjendage objektitüüpi ob salvestatud täisarv väärtus täisarvutüübiga y.
Objekti ob salvestatud väärtus saadakse, valades selle sama tüüpi objektile, millele objekt viitas, st täisarvutüübile „j”.
Kasti tühjendamine kulutab ka rohkem mälu ja rohkem aega. Kuna kui objektitüüp tuleb lahterdada, tuleb hunnikusse salvestatud objektitüübi väärtus kanda üle uuele korstnasse salvestatud väärtuse tüübile. Objektitüüp, mille väärtus on välja otsitud, on nüüd saadaval prügikoristamiseks.
- Poksis pannakse objekt viitama väärtuse tüübiks. Teisest küljest nimetatakse väärtust karbitud objektilt tagasi toomise protsessi lahterdamist.
- Virnas salvestatud väärtuse tüüp kopeeritakse hunnikmällu salvestatud objektile. Teisest küljest kopeeritakse kasti lahti võtmise korral hunnikmällu salvestatud objekt väärtuse tüübile, mis on salvestatud virnade mällu.
- Boksimine on kaudne teisendus, samas kui kastita on sõnaselge konversioon.
Järeldus:
Nii poks kui ka karbist väljaminek kulutavad rohkem aega ja mälu ning on arvutuslikult kallid. Neil puudub ka tüübi ohutus ja see suurendab käituskulusid. Alati soovitatakse programmis vältida poksimise ja karbist liiga palju kasutamist.