Recomandat, 2024

Alegerea Editorului

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

În C #, toate tipurile de valori sunt derivate din obiectul de clasă. Astfel, o variabilă de referință a obiectului de tip se poate referi la orice alt tip de valoare. C # introduce două metode pentru Boxing and Unboxing, care leagă tipul de valoare de tipul de referință. Diferența de bază între Box și Unboxing este aceea că Box este conversia tipului de valoare la un tip de obiect, în timp ce pe alte mâini, termenul Unboxing se referă la conversia tipului de obiect la tipul de valoare. Să studiem celelalte diferențe dintre Box și Unboxing.

Diagramă de comparație

Bazele comparațieiBoxunboxing
De bazăTipul de obiect se referă la tipul de valoare.proces de recuperare a valorii de la obiectul cutie.
DepozitareValoarea stocată în stivă este copiată în obiectul stocat în memoria heap.Valoarea obiectului stocată în memoria heap este copiată la tipul de valoare stocat pe stivă.
ConversieConversie implicită.Conversie explicită.
Exempluint n = 24;
obiect ob = n;
int m = (int) ob;

Definiția Boxing

Box este o procedură de conversie a unui tip de valoare la un tip de obiect. Aici, tipul de valoare este stocat pe stivă, iar tipul de obiect este stocat în memoria heap. Această conversie a tipului de valoare la tipul de obiect este o conversie implicită. Puteți atribui direct o valoare unui obiect, iar C # va ocupa restul conversiei. Să înțelegem Boxing cu un exemplu.

 int i = 24; obiect ob = i; // Boxul intregul tip n în obiectul tip ob. sau obiect ob1 = 21; // aici, de asemenea, un obiect tip ob1 se referă la un tip întreg 

În codul de mai sus, tipul întregului i care conține valoarea 24 este stocat pe stivă și este copiat în obiectul tip 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ă schimbați valoarea i, nu va reflecta schimbarea valoarea ob.

Boxul consumă memorie suplimentară, împreună cu timp suplimentar. Motivul este că un obiect nou, care se va referi la tipul de valoare, trebuie să aloce spațiul de memorie pe heap. Apoi, valoarea tipului de valoare care este stocată pe stivă va fi transferată în ob tipul de obiect, în locația de memorie heap.

Definiția Unboxing

Restul Boxului este Unboxing. Unboxing este o conversie a tipului de obiect la tipul de valoare. În Dezarhivare, valoarea tipului de obiect în cutie stocat pe heap este transferat la tipul de valoare stocat pe stivă. Spre deosebire de box, Unboxing trebuie făcut în mod explicit. Tipul de obiect este exprimat în mod explicit la tipul de valoare, iar tipul de valoare trebuie să fie același cu valoarea la care se referă tipul de obiect. Să înțelegem conceptul Unboxing cu un exemplu.

 int i = 24; obiect ob = i; // Boxul intregul tip n în obiectul tip ob. int j = (int) ob; // Unbox valoarea întregului stocată în obiectul type ob de la întregul tip y. 

Valoarea stocată în ob ob este extrasă prin turnarea acesteia la același tip cu cel referindu-se la obiect, de exemplu, întregul tip "j".

Unboxing consumă, de asemenea, mai multă memorie și mai mult timp. Întrucât, atunci când un tip de obiect trebuie să fie fără casete, atunci valoarea tipului de obiect stocat pe heap trebuie transferată la noul tip de valoare stocat pe stivă. Tipul de obiect a cărui valoare a fost recuperată va fi acum disponibilă pentru colectarea gunoiului.

Diferențele cheie între box și unboxing

  1. În box, un obiect este făcut să se refere la un tip de valoare. Pe de altă parte, procesul de extragere a valorii înapoi de la obiectul în cutie se numește unboxing.
  2. Un tip de valoare stocat pe o stivă este copiat în obiectul stocat în memoria heap. Pe de altă parte, în dezarhivare, un obiect stocat pe memoria heap este copiat la un tip de valoare stocat în memoria stack-ului.
  3. Boxul este o conversie implicită, în timp ce unboxing este o conversie explicită.

Concluzie:

Atât boxul, cât și cel de dezmembrare consumă mai mult timp și memorie și sunt scump computațional. De asemenea, lipsesc siguranța de tip și măresc timpul de execuție. Este întotdeauna recomandat să evitați prea mult folosirea boxului și dezarhivării în program.

Top