Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi boxom a unboxing v C #

V C # sú všetky typy hodnôt odvodené z objektu triedy. Takže referenčná premenná typu objektu môže odkazovať na akýkoľvek iný typ hodnoty. C # zavádza dve metódy pre Boxing a Unboxing, ktoré prepájajú typ hodnoty s referenčným typom. Základným rozdielom medzi Boxing a Unboxing je, že Boxing je konverzia typu hodnoty na typ objektu, zatiaľ čo na iných rukách termín Unboxing označuje konverziu typu objektu na typ hodnoty. Pozrime sa na ďalšie rozdiely medzi Boxing a Unboxing.

Porovnávacia tabuľka

Základ pre porovnanieboxRozbaľovanie
základnéTyp objektu sa vzťahuje na typ hodnoty.proces získavania hodnoty z rámcového objektu.
skladovanieHodnota 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.
premenaImplicitná konverzia.Explicitná konverzia.
príkladint 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

  1. V boxe sa objekt robí ako typ hodnoty. Na druhej strane sa proces získavania hodnoty späť z rámca objektu nazýva unboxing.
  2. 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.
  3. 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.

Top