Srovnávací graf
Základ pro porovnání | Box | Rozbalení |
---|---|---|
Základní | Typ objektu odkazuje na typ hodnoty. | procesu načítání hodnoty z krabicového objektu. |
Úložný prostor | Hodnota uložená v zásobníku je zkopírována do objektu uloženého v paměti haldy. | Hodnota objektu uložená v paměti haldy se zkopíruje do typu hodnoty uloženého v zásobníku. |
Konverze | Implicitní konverze. | Explicitní konverze. |
Příklad | int n = 24; objekt ob = n; | int m = (int) ob; |
Definice boxu
Box je postup převodu typu hodnoty na typ objektu. Zde je typ hodnoty uložen v zásobníku a typ objektu je uložen v paměti haldy. Tento typ převodu hodnoty na typ objektu je implicitní převod. Objektu můžete přímo přiřadit hodnotu a funkce C # bude zpracovávat konverzi zbytku. Pojďme pochopit, Boxing s příkladem.
int i = 24; objekt ob = i; // Vložte celé číslo typu n do objektu typu ob. nebo objekt ob1 = 21; // zde také objekt typu ob1 označuje celočíselný typ
Ve výše uvedeném kódu je celé číslo typu i obsahující hodnotu 24 uloženo v zásobníku a zkopírováno do objektu typu ob. Typ objektu nyní odkazuje na celočíselnou hodnotu. „Int i“ nyní také obsahuje hodnotu 24 a „objekt typu ob“ také obsahuje hodnotu 24, ale obě hodnoty jsou na sobě nezávislé, tj. Pokud změníte hodnotu i, nebude to odrážet změnu hodnota ob.
Box spotřebovává další paměť spolu s časem navíc. Důvodem je, že nový objekt, který bude odkazovat na typ hodnoty, musí přidělit paměťový prostor na haldě. Dále bude hodnota typu hodnoty, která je uložena ve svazku, přenesena na objekt typu objekt na místo v paměti haldy.
Definice unboxingu
Zadní strana boxu je Unboxing. Unboxing je převod typu objektu na typ hodnoty. V poli Unboxing se hodnota typu objektu boxu uloženého na haldě převede na typ hodnoty, který je uložen v zásobníku. Na rozdíl od boxu musí být Unboxing proveden explicitně. Typ objektu je explicitně přiřazen k typu hodnoty a typ hodnoty musí být stejný jako hodnota, na kterou odkazuje typ objektu. Pojďme pochopit koncept Unboxing s příkladem.
int i = 24; objekt ob = i; // Vložte celé číslo typu n do objektu typu ob. int j = (int) ob; // Odemknout celočíselnou hodnotu uloženou v objektu typu ob až integer typu y.
Hodnota uložená v objektu ob je získána tak, že je převedena na typ, který byl stejný jako objekt, tj. Na celé číslo typu „j“.
Unboxing také spotřebovává více paměti a více času. Vzhledem k tomu, že typ objektu musí být zrušen, musí být hodnota typu objektu uloženého v haldě přenesena na nový typ hodnoty uložený v zásobníku. Typ objektu, jehož hodnota byla načtena, bude nyní k dispozici pro sběr odpadu.
Klíčové rozdíly mezi boxem a Unboxing
- V boxu je objekt označen jako typ hodnoty. Na druhé straně, proces načítání hodnoty zpět z boxovaného objektu se nazývá unboxing.
- Typ hodnoty uložený v zásobníku je zkopírován do objektu uloženého v paměti haldy. Na druhou stranu, v unboxing, objekt uložený v paměti haldy je zkopírován do typu hodnoty uloženého v paměti zásobníku.
- Box je implicitní konverze, zatímco unboxing je explicitní konverze.
Závěr:
Oba box a unboxing spotřebovávají více času a paměti a jsou počítačově drahé. Také jim chybí typová bezpečnost a zvyšuje se runtime režie. V programu se vždy doporučuje vyhnout se přílišnému používání boxu a rozbalování.