Anbefalt, 2024

Redaksjonens

Forskjellen mellom boksing og unboxing i C #

I C # er alle verdittyper avledet fra klasseobjektet. Så, en referansevariabel for typeobjekt kan referere til en hvilken som helst annen verdi type. C # introduserer to metoder til boksing og unboxing, som kobler verdien type til referansetype. Den grunnleggende forskjellen mellom boksing og unboxing er at boksing er konverteringen av verdiktypen til en objekttype mens i andre hender refererer termen Unboxing til konvertering av objekttype til verdittypen. La oss studere de andre forskjellene mellom boksing og unboxing.

Sammenligningstabel

Grunnlag for sammenligningBoksingunboxing
grunn~~POS=TRUNCObjekttype refererer til verdien typen.prosess for å hente verdi fra det boksede objektet.
OppbevaringVerdien som er lagret på stakken, kopieres til objektet som er lagret på heapminne.Objektets verdi lagret på heapminnet kopieres til verdien typen lagret på stakken.
OmdannelseImplisitt konvertering.Eksplisitt konvertering.
Eksempelint n = 24;
objekt ob = n;
int m = (int) ob;

Definisjon av boksing

Boksing er en prosedyre for å konvertere en verditype til en objekttype. Her lagres verdienstypen på stakken, og gjenstandstypen lagres i heapminne. Denne konverteringen av verdi type til objekttypen er en implisitt konvertering. Du kan direkte tilordne en verdi til en gjenstand, og C # vil håndtere resten konvertering. La oss forstå boksing med et eksempel.

 int i = 24; objekt ob = i; // Boksen heltall typen n til objekttype ob. eller objekt ob1 = 21; // her henviser også en objekttype ob1 til en heltalltype 

I overkoden lagres heltall type I som inneholder verdi 24 på stakken og kopieres til objekttypen ob. En objekttype refererer nå til et heltall. Nå inneholder "int i" også verdi 24 og "objekttype ob" inneholder også verdi 24, men begge verdiene er uavhengige av hverandre, dvs. hvis du endrer verdien av jeg, vil den ikke gjenspeile endringen i verdi av ob.

Boksing forbruker ekstra minne sammen med ekstra tid. Årsaken er at et nytt objekt, som vil referere til verdienstypen, må allokere minneplassen på bunken. Deretter blir verdien av verdiktypen som er lagret på stakken, overført til ob-objekttypen, på heapminneposisjonen.

Definisjon av Unboxing

Den omvendte boksen er Unboxing. Unboxing er en konvertering av objekttype til verdittypen. I Unboxing overføres verdien av boksobjekttype lagret på bunken til verdittypen som er lagret på stakken. I motsetning til boksing, må Unboxing gjøres eksplisitt. Objekttypen er eksplisitt gjengitt til verditypen, og verdienstypen må være den samme som verdien objekttypen refererer til. La oss forstå konseptet Unboxing med et eksempel.

 int i = 24; objekt ob = i; // Boksen heltall typen n til objekttype ob. int j = (int) ob; // Unbox integerverdien lagret i objekttype ob til heltalltype y. 

Verdien lagret i objektet ob hentes ved å kaste den til typen samme som objektet refererte til dvs. heltalltype "j".

Unboxing bruker også mer minne og mer tid. Siden når en objekttype må unboxes, må verdien av objekttype lagret på bunken overføres til den nye verditypen som er lagret på stakken. Objekttypen, hvis verdi som er hentet, vil nå være tilgjengelig for søppelsamling.

Viktige forskjeller mellom boksing og unboxing

  1. I boksing er det laget en gjenstand som refererer som en verditype. På den annen side kalles prosessen med å hente verdien tilbake fra det boksede objektet unboxing.
  2. En verditype som er lagret på en stabel, kopieres til objektet som er lagret på heapminne. På den annen side, i unboxing, kopieres et objekt lagret på heapminne til en verdi type lagret på stakkhukommelse.
  3. Boksing er en implisitt konvertering, mens unboxing er en eksplisitt konvertering.

Konklusjon:

Både boksing og unboxing spiser mer tid og minne, og de er beregnende dyrt. De mangler også type sikkerhet og øker runtime overhead. Det anbefales alltid å unngå for mye bruk av boksing og unboxing i programmet.

Top