Rozdiel medzi boxom a boxom v C #
Obsah
V C # sú všetky typy hodnôt odvodené od objektu triedy. Referenčná premenná typu type teda môže odkazovať na akýkoľvek iný typ hodnoty. C # predstavuje dve metódy pre Boxing a Unboxing, ktoré spájajú typ hodnoty s typom odkazu. Základný rozdiel medzi boxom a unboxingom je v tom, že box je prevod typu hodnoty na typ objektu, zatiaľ čo pojem unboxing na druhej strane označuje prevod typu objektu na typ hodnoty. Poďme študovať ďalšie rozdiely medzi boxom a unboxingom.
- Porovnávacia tabuľka
- definícia
- Kľúčové rozdiely
- záver
Porovnávacia tabuľka
Základ pre porovnanie | box | Rozbaľovanie |
---|---|---|
základné | Typ objektu sa týka typu hodnoty. | proces získavania hodnoty z boxovaného objektu. |
skladovanie | Hodnota uložená v zásobníku sa skopíruje do objektu uloženého v pamäti haldy. | Hodnota objektov 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
Box 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 implicitnou konverziou. Môžete priamo priradiť hodnotu k objektu a C # spracuje zvyšnú konverziu. Poďme pochopiť Boxing s príkladom.
int i = 24; objekt ob = i; // Zadajte celé číslo n do typu objektu ob. alebo objekt ob1 = 21; // tu tiež typ objektu ob1 označuje celočíselný typ
Vo vyššie uvedenom kóde je celé číslo typu i obsahujúce hodnotu 24 uložené v zásobníku a skopíruje sa do typu objektu ob. Typ objektu teraz odkazuje na celočíselnú hodnotu. Teraz „int i“ tiež obsahuje hodnotu 24 a „typ objektu ob“ tiež obsahujú hodnotu 24, ale obe hodnoty sú na sebe nezávislé, tj ak zmeníte hodnotu i, nebude to odrážať zmenu v hodnota ob.
Box spotrebuje viac pamäte spolu s predĺžením. Dôvod je ten, že nový objekt, ktorý bude odkazovať na typ hodnoty, musí vyhradiť pamäťový priestor na halde. Ďalej sa hodnota typu hodnoty uložená v zásobníku prenesie do typu objektu na miesto v pamäti haldy.
Definícia rozbalenia
Zadná strana boxu je Unboxing. Unboxing je prevod typu objektu na typ hodnoty. V poli Unboxing sa hodnota typu boxovaného objektu uloženého na halde prevedie na typ hodnoty, ktorý je uložený v zásobníku. Na rozdiel od boxu musí byť rozbalenie vykonávané explicitne. Typ objektu je explicitne prenášaný na typ hodnoty a typ hodnoty musí byť rovnaký ako hodnota, na ktorú typ objektu odkazuje. Pochopme pojem Unboxing na príklade.
int i = 24; objekt ob = i; // Zadajte celé číslo n do typu objektu ob. int j = (int) ob; // Odznačte celočíselnú hodnotu uloženú v type objektu ob na celočíselný typ y.
Hodnota uložená v objekte ob sa získa liatím na typ rovnaký, ako objekt, na ktorý odkazoval t. J. Celočíselný typ „j“.
Unboxing tiež spotrebuje viac pamäte a viac času. Pretože, keď sa musí typ objektu odbaliť, musí sa hodnota typu objektu uložená na halde preniesť na nový typ hodnoty uložený v zásobníku. Typ objektu, ktorého hodnota bola získaná, bude teraz k dispozícii na zber odpadu.
- V rámčeku je objekt označený ako typ hodnoty. Na druhej strane sa proces získavania hodnoty späť z boxovaného objektu nazýva unboxing.
- Typ hodnoty uložený v zásobníku sa skopíruje do objektu uloženého v pamäti haldy. Na druhej strane, pri rozbaľovaní sa objekt uložený v halde pamäte skopíruje do typu hodnoty uloženého v pamäti zásobníka.
- Box je implicitná konverzia, zatiaľ čo unboxing je explicitná konverzia.
záver:
Box aj unboxing spotrebujú viac času a pamäte a sú výpočtovo drahé. Chýba im tiež bezpečnosť typu a zvyšuje režijné náklady. Vždy sa odporúča vyhnúť sa nadmernému využívaniu boxu a boxu v programe.