Razlika između boksa i unboxinga u C #
Sadržaj
U C #, sve vrste vrijednosti izvode se iz objekta klase. Dakle, referentna varijabla objekta tipa može se odnositi na bilo koju drugu vrstu vrijednosti. C # uvodi dvije metode u Boxing i Unboxing, koje povezuju vrstu vrijednosti s referentnom vrstom. Osnovna razlika između Boxinga i Unboxinga jest da je Boxing pretvaranje vrste vrijednosti u objektni tip, dok se, s druge strane, izraz Unboxing odnosi na pretvaranje tipa objekta u vrijednost vrijednosti. Proučimo ostale razlike između boksa i unboxinga.
- Usporedni grafikon
- definicija
- Ključne razlike
- Zaključak
Usporedni grafikon
Osnove za usporedbu | Boks | Raspakirati |
---|---|---|
Osnovni, temeljni | Vrsta objekta odnosi se na vrstu vrijednosti. | postupak pronalaženja vrijednosti iz objekta u kutiji. |
skladištenje | Vrijednost pohranjena u stog kopiraju se u objekt pohranjen u heap memoriji. | Vrijednost objekata pohranjenih u heap memoriji kopira se u vrstu vrijednosti spremljenu na stoku. |
Konverzija | Implicitno pretvaranje. | Izričito pretvaranje. |
Primjer | int n = 24; objekt ob = n; | int m = (int) ob; |
Definicija boksa
Boks je postupak pretvaranja vrste vrijednosti u tip objekta. Ovdje se vrsta vrijednosti sprema u stog, a vrsta objekta sprema se u heap memoriju. Ovo pretvaranje vrste vrijednosti u objektni tip je implicitna konverzija. Objektu možete izravno dodijeliti vrijednost, a C # će obraditi ostatak pretvorbe. Da razumemo Boxing s primjerom.
int i = 24; objekt ob = i; // Unesite tip cijelog broja n u tip objekta ob. ili objekt ob1 = 21; // ovdje se također objektni tip ob1 odnosi na cijeli broj
U gornjem kôdu, cijeli broj i sadrži vrijednost 24 pohranjuje se u stog i kopira se u objektni tip ob. Vrsta objekta sada se odnosi na cjelobrojnu vrijednost. Sada "int i" također sadrži vrijednost 24, a "tip objekta ob" također sadrži vrijednost 24, ali obje vrijednosti su neovisne jedna o drugoj, tj. Ako promijenite vrijednost i, neće odražavati promjenu u vrijednost ob.
Boks troši dodatnu memoriju zajedno s dodatnim vremenom. Razlog je taj što novi objekt, koji će se odnositi na vrijednost vrijednosti, mora rasporediti memorijski prostor na hrpi. Zatim će vrijednost vrste vrijednosti koja je pohranjena u stog prenijeti u tip objekta, na mjesto memorije heap.
Definicija Unboxinga
Naličje boksa je Unboxing. Raspakiranje pretvarača pretvara vrstu objekta u tip vrijednosti. Ako isključite okvir, vrijednost vrste predmeta u kutiji pohranjena na hrpi prenosi se u vrstu vrijednosti koja se sprema u stog. Za razliku od boksa, Unboxing se mora izričito odraditi. Tip objekta izričito je dodijeljen vrsti vrijednosti, a vrsta vrijednosti mora biti jednaka vrijednosti na koju se objekt odnosi. Razjasnimo pojam Unboxing s primjerom.
int i = 24; objekt ob = i; // Unesite tip cijelog broja n u tip objekta ob. int j = (int) ob; // Raspakirajte cijelu vrijednost pohranjenu u vrsti objekta ob na cijeli broj y.
Vrijednost pohranjena u objektu ob pronalazi se tipkom onako kao što se objekt odnosi na, tj., Cijeli broj "j".
Unboxing također troši više memorije i više vremena. Budući da, kada tip objekta mora biti bez kutijice, vrijednost vrste objekta pohranjena na hrpi mora se prenijeti u novi tip vrijednosti koji je pohranjen u snopu. Vrsta objekta čija je vrijednost dohvaćena sada će biti dostupna za odvoz smeća.
- U boksu se stvara objekt koji označava vrstu vrijednosti. S druge strane, proces dohvaćanja vrijednosti iz objekta u kutiji naziva se unboxing.
- Vrijednost tipa spremljena u stog kopira se u objekt pohranjen u heap memoriji. S druge strane, u raspakiranju se objekt pohranjen u heap memoriji kopira u vrstu vrijednosti koja je pohranjena u memoriji stog.
- 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 radno vrijeme rada. Uvijek se savjetuje izbjegavanje previše korištenja boksa i odbacivanja boksa u programu.