Diferența dintre box și unboxing în C #

Autor: Laura McKinney
Data Creației: 2 Aprilie 2021
Data Actualizării: 4 Mai 2024
Anonim
Diferența dintre box și unboxing în C # - Tehnologie
Diferența dintre box și unboxing în C # - Tehnologie

Conţinut


În C #, toate tipurile de valori sunt derivate din obiectul clasei. Deci, o variabilă de referință de tip obiect se poate referi la orice alt tip de valoare. C # introduce două metode în Box și Unboxing, care leagă tipul valoric la tipul de referință. Diferența de bază între Box și Unboxing este că Boxing este conversia tipului valoric într-un tip de obiect, în timp ce, pe de altă parte, termenul Unboxing se referă la conversia tipului de obiect în tipul valorii. Să studiem celelalte diferențe dintre Box și Unboxing.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațieBoxunboxing
De bazăTipul obiectului se referă la tipul de valoare.procesul de preluare a valorii din obiectul din cutie.
DepozitareValoarea stocată pe stivă este copiată în obiectul stocat în memoria de acumulator.Valoarea obiectelor stocate în memoria heap-ului este copiată la tipul de valoare stocat pe stivă.
ConversieConversia implicită.Conversie explicită.
Exempluint n = 24;
obiect ob = n;
int m = (int) ob;


Definiția Boxing

Boxul este o procedură de transformare a unui tip de valoare la un tip de obiect. Aici, tipul valoric este stocat pe stivă, iar tipul obiect este stocat în memoria de acumulator. Această conversie a tipului valoric în tipul obiect este o conversie implicită. Puteți atribui direct o valoare unui obiect, iar C # se va ocupa de conversia restului. Să înțelegem boxul cu un exemplu.

int i = 24; obiect ob = i; // Bifați numărul întreg n în obiect obiect ob. sau obiect ob1 = 21; // aici, de asemenea, un obiect de tip ob1 se referă la un tip întreg

În codul de mai sus, tipul întreg care conține valoarea 24 este stocat pe stivă și este copiat în tipul de obiect ob. Un tip de obiect se referă acum la o valoare întreagă. Acum, „int i” conține și valoarea 24, iar „obiectul ob” conține și valoarea 24, dar ambele valori sunt independente una de cealaltă, adică dacă schimbi valoarea lui i, aceasta nu va reflecta schimbarea în valoarea ob.


Boxul consumă mai multă memorie împreună cu timp suplimentar. Motivul este că un obiect nou, care se va referi la tipul valorii, trebuie să aloce spațiul de memorie pe grămadă. În continuare, valoarea tipului valoric care este stocat în stivă va fi transferată către ob obiectul, pe locația de memorie a haldului.

Definiția Unboxing

Reversul boxului este Unboxing. Unboxing-ul este o conversie a tipului de obiect în tipul valorii. În Unboxing, valoarea tipului de obiect boxat stocat pe grămadă este transferată la tipul de valoare care este stocat pe stivă. Spre deosebire de Box, Unboxing-ul trebuie făcut explicit. Tipul de obiect este distribuit în mod explicit la tipul de valoare, iar tipul valorii trebuie să fie același ca și valoarea la care face referire tipul de obiect. Să înțelegem conceptul de Unboxing cu un exemplu.

int i = 24; obiect ob = i; // Bifați numărul întreg n în obiect obiect ob. int j = (int) ob; // Debifează valoarea întreagă stocată în tipul obiect ob la tipul întreg y.

Valoarea stocată în obiectul ob este preluată aruncând-o la același tip în care obiectul făcea referire la adică tipul întreg „j”.

De asemenea, deconectarea consumă mai multă memorie și mai mult timp. Întrucât, atunci când un tip de obiect trebuie să fie neîncadrat, atunci valoarea tipului de obiect stocat pe grămadă trebuie transferată la noul tip de valoare stocat pe stivă. Tipul obiectului a cărui valoare preluată va fi acum disponibil pentru colectarea gunoiului.

  1. În box, un obiect este făcut să se refere la un tip de valoare. Pe de altă parte, procesul de preluare a valorii înapoi de la obiectul box este numit unboxing.
  2. Un tip de valoare stocat într-o stivă este copiat în obiectul stocat în memoria acumulatorului. Pe de altă parte, la unboxing, un obiect stocat în memoria heap este copiat într-un tip de valoare stocat în memoria de stivă.
  3. Boxul este o conversie implicită, în timp ce unboxing-ul este o conversie explicită.

Concluzie:

Atât boxul, cât și boxul unboxing consumă mai mult timp și memorie și sunt costisitoare din punct de vedere computerizat. De asemenea, le lipsește siguranța tipului și crește timpul de rulare peste cap. Este întotdeauna recomandat să evitați prea mult utilizarea boxului și a deconectării în program.