Rozdiel medzi boxom a boxom v C #

Autor: Laura McKinney
Dátum Stvorenia: 2 Apríl 2021
Dátum Aktualizácie: 5 Smieť 2024
Anonim
KR CYBERTECH nano 2  Webinar by KUKA Nordic
Video: KR CYBERTECH nano 2 Webinar by KUKA Nordic

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.

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnanieboxRozbaľovanie
základnéTyp objektu sa týka typu hodnoty.proces získavania hodnoty z boxovaného objektu.
skladovanieHodnota 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.
premenaImplicitná konverzia.Explicitná konverzia.
príkladint 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.

  1. 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.
  2. 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.
  3. 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.