Rozdíl mezi boxem a rozbalením v C #
Obsah
V C # jsou všechny typy hodnot odvozeny od objektu třídy. Referenční proměnná typu type tedy může odkazovat na jakýkoli jiný typ hodnoty. C # zavádí dvě metody do boxu a unboxingu, které propojují typ hodnoty s typem odkazu. Základní rozdíl mezi boxem a unboxingem je v tom, že box je převod typu hodnoty na typ objektu, zatímco na druhé straně termín unboxing označuje převod typu objektu na typ hodnoty. Podívejme se na další rozdíly mezi boxem a unboxingem.
- Srovnávací tabulka
- Definice
- Klíčové rozdíly
- Závěr
Srovnávací tabulka
Základ pro srovnání | Box | Rozbalení |
---|---|---|
Základní | Typ objektu odkazuje na typ hodnoty. | proces načítání hodnoty z boxovaného objektu. |
Úložný prostor | Hodnota uložená v zásobníku se zkopíruje do objektu uloženého v paměti haldy. | Hodnota objektů uložená v paměti haldy je zkopírována 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 převod typu hodnoty na typ objektu je implicitní převod. Můžete přímo přiřadit hodnotu k objektu a C # se postará o zbytek převodu. Pojďme rozumět boxu s příkladem.
int i = 24; objekt ob = i; // Zadejte celé číslo n do typu objektu ob. nebo objekt ob1 = 21; // zde také typ objektu 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 typu objektu ob. Typ objektu nyní odkazuje na celočíselnou hodnotu. Nyní „int i“ také obsahuje hodnotu 24 a „objekt typu ob“ také obsahují hodnotu 24, ale obě hodnoty jsou na sobě nezávislé, tj. Pokud změníte hodnotu i, nebude to odrážet změnu v hodnota ob.
Box spotřebuje další paměť spolu s prodloužením času. Důvod je ten, že nový objekt, který bude odkazovat na typ hodnoty, musí alokovat paměťový prostor na haldě. Dále bude hodnota typu hodnoty, která je uložena v zásobníku, přenesena do typu objektu v umístění haldy.
Definice rozbalení
Zadní strana boxu je Unboxing. Unboxing je převod typu objektu na typ hodnoty. V poli Unboxing je převedena hodnota typu boxovaného objektu uloženého na haldy na typ hodnoty uložený v zásobníku. Na rozdíl od boxu musí být Unboxing proveden explicitně. Typ objektu je explicitně přenesen na typ hodnoty a typ hodnoty musí být stejný jako hodnota, na kterou typ objektu odkazuje. Pojďme pochopit koncept Unboxing s příkladem.
int i = 24; objekt ob = i; // Zadejte celé číslo n do typu objektu ob. int j = (int) ob; // Zrušte rozbalení celočíselné hodnoty uložené v typu objektu ob na celé číslo y.
Hodnota uložená v objektu ob je získána odlitím do typu stejného jako objekt, na který odkazoval, tj. Celočíselný typ „j“.
Unboxing také spotřebovává více paměti a více času. Protože, když musí být typ objektu rozbalen, musí být hodnota typu objektu uložená na haldě převedena 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.
- V boxu je objekt označen jako typ hodnoty. Na druhé straně se proces získávání hodnoty zpět z boxovaného objektu nazývá unboxing.
- Typ hodnoty uložený v zásobníku se zkopíruje do objektu uloženého v paměti haldy. Na druhou stranu, při rozbalení je objekt uložený v paměti haldy 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:
Box i unboxing spotřebovávají více času a paměti a jsou výpočetně drahé. Také jim chybí typová bezpečnost a zvyšuje provozní náklady. Vždy se doporučuje vyhnout se příliš velkému využívání boxu a rozbalení v programu.