Rozdíl mezi boxem a rozbalením v C #

Autor: Laura McKinney
Datum Vytvoření: 2 Duben 2021
Datum Aktualizace: 5 Smět 2024
Anonim
Rozdíl mezi boxem a rozbalením v C # - Technologie
Rozdíl mezi boxem a rozbalením v C # - Technologie

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.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníBoxRozbalení
ZákladníTyp objektu odkazuje na typ hodnoty.proces načítání hodnoty z boxovaného objektu.
Úložný prostorHodnota 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.
KonverzeImplicitní konverze.Explicitní konverze.
Příkladint 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.

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