Porovnávacia tabuľka
Základ pre porovnanie | box | Rozbaľovanie |
---|---|---|
základné | Typ objektu sa vzťahuje na typ hodnoty. | proces získavania hodnoty z rámcového objektu. |
skladovanie | Hodnota uložená v zásobníku sa skopíruje na objekt uložený v pamäti haldy. | Hodnota objektu uložená v pamäti haldy sa skopíruje do typu hodnoty uloženého v zásobníku. |
premena | Implicitná konverzia. | Explicitná konverzia. |
príklad | int n = 24; objekt ob = n; | int m = (int) ob; |
Definícia boxu
Boxovanie je postup prevodu typu hodnoty na typ objektu. Tu je typ hodnoty uložený v zásobníku a typ objektu je uložený v pamäti haldy. Táto konverzia typu hodnoty na typ objektu je implicitná konverzia. Môžete priamo priradiť hodnotu objektu a C # spracováva zvyšnú konverziu. Poďme pochopiť Boxing s príkladom.
int i = 24; objekt ob = i; // Začiarknite celé číslo typu n do typu objektu ob. alebo objekt ob1 = 21; // tu sa tiež typ objektu ob1 vzťahuje na celý typ
Vo vyššie uvedenom kóde sa v stohu ukladá celé číslo typu i obsahujúce 24 a skopíruje sa do typu objektu ob. Typ objektu teraz odkazuje na celočíselnú hodnotu. Teraz "int i" obsahuje aj hodnotu 24 a "objekt typu ob" obsahuje aj hodnotu 24, ale obe hodnoty sú navzájom nezávislé, tj ak zmeníte hodnotu i, nebude to odrážať zmenu v hodnota ob.
Boxing spotrebuje extra pamäť spolu s dodatočným časom. Dôvodom je, že nový objekt, ktorý sa vzťahuje na typ hodnoty, musí prideliť pamäťový priestor na halde. Ďalej sa hodnota typu typu, ktorá je uložená v zásobníku, prenesie do obného typu objektu na pamäťovej oblasti haldy.
Definícia Unboxingu
Naopak Box je Unboxing. Unboxing je konverzia typu objektu na typ hodnoty. V režime Unboxing sa hodnota typu balíka uloženého na halde prenesie na typ hodnoty, ktorý je uložený v zásobníku. Na rozdiel od boxu musí byť unboxing vykonaný explicitne. Typ objektu je explicitne obsadený na typ hodnoty a typ hodnoty musí byť rovnaký ako hodnota, na ktorú sa vzťahuje typ objektu. Pochopme pojem Unboxing s príkladom.
int i = 24; objekt ob = i; // Začiarknite celé číslo typu n do typu objektu ob. int j = (int) ob; // Unbox celočíselná hodnota uložená v type objektu ob do integer typu y.
Hodnota uložená v objekte ob je získaná odovzdávaním do rovnakého typu, aký objekt odkazoval, tj na celé číslo typu "j".
Unboxing tiež spotrebováva viac pamäte a viac času. Pretože, ak musí byť objekt typu unboxed, hodnota typu objektu uloženého na halde musí byť prevedená na nový typ hodnoty uložený v zásobníku. Typ objektu, ktorého získaná hodnota bude teraz k dispozícii na zber odpadu.
Kľúčové rozdiely medzi boxom a unboxingom
- V boxe sa objekt robí ako typ hodnoty. Na druhej strane sa proces získavania hodnoty späť z rámca objektu nazýva unboxing.
- Typ typu hodnoty uložený v zásobníku sa skopíruje do objektu uloženého v pamäti haldy. Na druhej strane, pri unboxingu sa objekt uložený v pamäti haldy skopíruje na typ hodnoty uložený v pamäti zásobníka.
- Boxovanie je implicitná konverzia, zatiaľ čo unboxing je explicitná konverzia.
záver:
Boxing i unboxing spotrebúvajú viac času a pamäte a sú náročné na výpočet. Tiež chýba typ bezpečnosti a zvyšuje runtime nad hlavou. Vždy sa odporúča vyhnúť sa prílišnému používaniu boxu a unboxingu v programe.