Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp bokso ir išpakavimo iš „C #“

C #, visi vertės tipai yra gaunami iš klasės objekto. Taigi, tipo objekto etaloninis kintamasis gali būti susijęs su bet kuriuo kitu vertės tipu. „C #“ pateikia du metodus, skirtus „Boxing“ ir „Unboxing“, kuris susieja vertės tipą su etaloniniu tipu. Pagrindinis skirtumas tarp „Bokso“ ir „Unboxing“ yra tai, kad Boksas yra vertės tipo konvertavimas į objekto tipą, o kitose rankose terminas „išpakavimas“ reiškia objekto tipo konvertavimą į vertės tipą. Ištirsime kitus skirtumus tarp bokso ir išpakavimo.

Palyginimo diagrama

Palyginimo pagrindasBoksasIšpakavimas
PagrindinisObjekto tipas reiškia vertės tipą.vertės nuskaitymas iš dėžutės objekto.
SaugojimasSraigte saugoma vertė nukopijuojama į objektą, saugomą krūvos atmintyje.Objekto vertė, saugoma krūvos atmintyje, nukopijuojama į verčių tipą, saugomą kamino.
KonversijaNetiesioginė konversija.Aiškus konvertavimas.
Pavyzdysint n = 24;
objektas ob = n;
int m = (int) ob;

Bokso apibrėžimas

Boksas yra vertės tipo konvertavimo į objekto tipą procedūra. Čia reikšmės tipas yra saugomas kamino vietoje, o objekto tipas išsaugomas krūvos atmintyje. Šis vertės tipo konvertavimas į objekto tipą yra netiesioginė konversija. Galite tiesiogiai priskirti vertę objektui, o C # tvarkys poilsio konversiją. Suprasime bokso pavyzdį.

 int i = 24; objektas ob = i; // Dėžutėje įrašykite n tipo sveikąjį skaičių į objekto tipą ob. arba objektas ob1 = 21; // čia taip pat objektų tipas ob1 reiškia sveikojo skaičiaus tipą 

Pirmiau pateiktame kode įrašytas i skaičius, kuriame yra 24 vertė, yra saugoma kaminai ir nukopijuojama į objekto tipą ob. Objekto tipas dabar reiškia sveiką skaičių. Dabar „int i“ taip pat turi reikšmę 24, o „objekto tipas ob“ taip pat turi reikšmę 24, bet abi reikšmės yra nepriklausomos viena nuo kitos, ty jei pakeisite i vertę, ji neatspindi pakeitimo vertė ob.

Boksas sunaudoja papildomą atmintį kartu su papildomu laiku. Taip yra todėl, kad naujas objektas, kuris bus susijęs su vertės tipu, turi paskirstyti atminties talpą krūvoje. Toliau verte įrašytos reikšmės tipo vertė bus perkelta į objekto tipą, atminties vietoje.

„Unboxing“ apibrėžimas

Bokso atvirkštinis yra „Unboxing“. Atsijungimas yra objekto tipo konvertavimas į vertės tipą. „Unboxing“ (išpakavimas) dėžutėje saugomo dėžutės objekto tipo vertė perkeliama į verčių tipą, kuris saugomas kamino. Skirtingai nuo Bokso, „Unboxing“ turi būti daroma aiškiai. Objekto tipas yra aiškiai perduotas reikšmės tipui, o vertės tipas turi būti toks pat, kaip ir objekto tipo reikšmė. Suprasime „Unboxing“ sąvoką su pavyzdžiu.

 int i = 24; objektas ob = i; // Dėžutėje įrašykite n tipo sveikąjį skaičių į objekto tipą ob. int j = (int) ob; // Išpakuokite sveikojo skaičiaus reikšmę, išsaugotą objekto tipui ob į sveiką skaičių y tipo. 

Objekte ob saugoma reikšmė gaunama nukreipiant jį į tokį patį tipą, kaip ir objektas, ty „sveikasis skaičius“.

Išpakavimas taip pat sunaudoja daugiau atminties ir daugiau laiko. Kadangi, kai objekto tipas turi būti išpakuotas, tada krūva saugomo objekto tipo vertė turi būti perkelta į naują vertę, saugomą kamino. Objekto tipas, kurio vertė buvo atkurta, dabar bus pasiekiama šiukšlių surinkimui.

Pagrindiniai skirtumai tarp bokso ir išpakavimo

  1. Bokso metu objektas yra nurodomas kaip vertės tipas. Kita vertus, vertės atgavimo iš dėžutės objekto procesas vadinamas unboxing.
  2. Sraigte saugomas vertės tipas nukopijuojamas į objektą, saugomą krūvos atmintyje. Kita vertus, išpakuojant atmintyje išsaugotą objektą, kopijuojamas į vertės tipą, saugomą kamino atmintyje.
  3. Boksas yra netiesioginė konversija, o išpakavimas yra aiški konversija.

Išvada:

Tiek bokso, tiek unboxing sunaudoja daugiau laiko ir atminties, ir jie yra brangūs. Jie taip pat trūksta tipo saugos ir padidina darbo laiką. Visada patartina vengti pernelyg didelio bokso ir unboxing naudojimo programoje.

Top