Preporučeno, 2024

Izbor Urednika

Razlika između Boxinga i Unboxinga u C #

U C #, svi tipovi vrijednosti su izvedeni iz objekta klase. Dakle, referentna varijabla tipa objekta može se odnositi na bilo koji drugi tip vrijednosti. C # uvodi dvije metode za Boxing i Unboxing, koje povezuju vrstu vrijednosti s referentnim tipom. Osnovna razlika između Boxinga i Unboxinga je u tome što je Boxing konverzija tipa vrijednosti u tip objekta, dok se, s druge strane, izraz Unboxing odnosi na pretvorbu tipa objekta u tip vrijednosti. Proučimo ostale razlike između Boxinga i Unboxinga.

Tablica usporedbe

Osnova za usporedbuBoksRaspakirati
Osnovni, temeljniTip objekta odnosi se na vrstu vrijednosti.postupak dohvaćanja vrijednosti iz predmeta uokvirenog predmeta.
skladištenjeVrijednost pohranjena na snopu kopira se na objekt pohranjen u memoriji hrpe.Vrijednost objekta pohranjena u memoriji hrpe kopira se u tip vrijednosti pohranjene na stog.
KonverzijaImplicitna konverzija.Eksplicitna pretvorba.
Primjerint n = 24;
objekt ob = n;
int m = (int) ob;

Definicija boksa

Boks je postupak pretvaranja tipa vrijednosti u tip objekta. Ovdje je vrijednost tipa pohranjena u stog, a tip objekta je pohranjen u memoriji hrpe. Ova pretvorba tipa vrijednosti u tip objekta je implicitna konverzija. Možete izravno dodijeliti vrijednost objektu, a C # obradit će ostatak pretvorbe. Razmotrimo Boxing s primjerom.

 int i = 24; objekt ob = i; // Paket cjelobrojnog tipa n u tip objekta ob. ili objekt ob1 = 21; // ovdje također objekt tip ob1 odnosi se na cijeli broj 

U gornjem kodu, cjelobrojni tip i koji sadrži vrijednost 24 pohranjuje se na stog i kopira se u tip objekta ob. Tip objekta sada se odnosi na cijeli broj. Sada, "int i" također sadrži vrijednost 24 i "tip objekta ob" također sadrži vrijednost 24, ali obje su vrijednosti neovisne jedna o drugoj, tj. Ako promijenite vrijednost i, to neće odražavati promjenu u vrijednost ob.

Boks troši više memorije zajedno s dodatnim vremenom. Razlog tome je što novi objekt, koji će se odnositi na vrstu vrijednosti, mora dodijeliti memorijski prostor na hrpi. Zatim, vrijednost tipa vrijednosti koja je pohranjena u stog će se prenijeti u objektni tip, na mjesto memorije hrpe.

Definicija unboxinga

Poleđina Boxinga je Unboxing. Unboxing je pretvorba tipa objekta u tip vrijednosti. U Unboxing-u, vrijednost boksiranog tipa objekta pohranjenog u hrpi prenosi se na tip vrijednosti koji je pohranjen u stog. Za razliku od Boxinga, Unboxing se mora izvesti eksplicitno. Tip objekta eksplicitno je preusmjeren na tip vrijednosti, a tip vrijednosti mora biti isti kao i vrijednost na koju se odnosi tip objekta. Razmotrimo koncept Unboxinga s primjerom.

 int i = 24; objekt ob = i; // Paket cjelobrojnog tipa n u tip objekta ob. int j = (int) ob; / / Unbox cjelobrojne vrijednosti pohranjene u tipu objekta ob do integer tipa y. 

Vrijednost pohranjena u objektu ob je dohvaćena bacajući je na tip koji je isti kao objekt koji se odnosi na tj. Cijeli broj tipa “j”.

Unboxing također troši više memorije i više vremena. Budući da, kada tip objekta mora biti uklonjen iz spremnika, vrijednost tipa objekta pohranjenog u hrpi mora biti prenesena u novi tip vrijednosti pohranjen u stogu. Vrsta objekta čija je vrijednost preuzeta sada će biti dostupna za prikupljanje smeća.

Ključne razlike između Boxinga i Unboxinga

  1. U boksu, objekt se označava kao vrijednost tipa. S druge strane, proces vraćanja vrijednosti iz spremljenog predmeta naziva se unboxing.
  2. Tip vrijednosti pohranjen na stog kopira se u objekt pohranjen u memoriji hrpe. S druge strane, kod unboxinga, objekt pohranjen u memoriji hrpe kopira se u tip vrijednosti pohranjen u memoriji stog.
  3. Boks je implicitna konverzija dok je unboxing eksplicitna konverzija.

Zaključak:

I boks i unboxing troše više vremena i memorije, a računski su skupi. Također im nedostaje sigurnost tipa i povećava opterećenje u vrijeme izvođenja. Uvijek se savjetuje da izbjegavate previše korištenja boksa i unboxinga u programu.

Top