Ajánlott, 2024

Szerkesztő Választása

Különbség a bokszolás és a bontás között C # -nél

A C # -nél az összes értéktípus az osztályobjektumból származik. Tehát a típusobjektum referencia változója bármely más típusú értékre utalhat. A C # két módszert mutat be a Boxing és az Unboxing funkcióhoz, amely az érték típusát a referencia típushoz kapcsolja. A Boxing és az Unboxing közötti különbség az, hogy a Boxing az értéktípus egy objektumtípusra való átalakítása, míg más kezekben az Unboxing kifejezés az objektumtípus értéktípusra való átalakítására utal. Vizsgáljuk meg a Boxing és az Unboxing közötti különbségeket.

Összehasonlító táblázat

Az összehasonlítás alapjadobozolásKicsomagolás
AlapvetőAz objektum típusa az értéktípusra vonatkozik.az érték lekérése a dobozos objektumból.
TárolásA veremben tárolt érték átmásolódik a halom memóriájában tárolt objektumra.A halom memóriájában tárolt objektum értékét a veremben tárolt értékre másolja.
ÁtalakításImplicit átalakítás.Kifejezett konverzió.
Példaint n = 24;
Ob = n objektum;
int m = (int) ob;

A boksz meghatározása

Az ökölvívás az értéktípus egy objektumtípusra való átalakításának eljárása. Itt az értéktípus tárolódik a veremben, és az objektumtípus a halom memóriájában tárolódik. Az értéktípusnak az objektumtípusra való átalakítása implicit átalakítás. Az objektumhoz közvetlenül rendelhet értéket, és a C # kezelni fogja a többi konverziót. Tegyük meg a Boxing példáját.

 int i = 24; Ob = i objektum; // Az n típusú egész számot az ob. vagy Ob1 = 21 objektum; // itt is egy Ob1 típusú objektum egész számra vonatkozik 

A fenti kódban a 24-es értéket tartalmazó i. Típusú egész szám tárolódik a veremen, és az Ob. Egy objektumtípus most egész számra utal. Most az „int i” szintén tartalmaz 24 értéket, és az „Ob objektumtípus” is tartalmaz 24 értéket, de mindkét érték független egymástól, azaz ha megváltoztatod az i értéket, akkor ez nem fogja tükrözni a változást ob. értéke

Az ökölvívás többletmemóriát és extra időt igényel. Ennek az az oka, hogy egy új objektumnak, amely az értéktípusra utal, meg kell osztania a memóriát a kupacon. Ezután a veremben tárolt értéktípus értékét az objektumtípusra, a kupacmemória-helyre továbbítjuk.

Az Unboxing meghatározása

A boksz háttere az Unboxing. Az Unboxing az objektumtípus értéktípusra való átalakítása. Az Unboxing (Csomagolás eltávolítása) mezőben a halomban tárolt dobozos objektumtípus értékét a veremben tárolt értéktípusra helyezi át. A Boxingtól eltérően az Unboxing kifejezetten meg kell történnie. Az objektumtípust kifejezetten az értéktípusra osztják, és az értéktípusnak meg kell egyeznie az objektumtípus értékével. Lássuk meg az Unboxing fogalmát egy példával.

 int i = 24; Ob = i objektum; // Az n típusú egész számot az ob. int j = (int) ob; // A Ob objektumtípusban tárolt egész szám értékét törölje az y egész számba. 

Az ob objektumban tárolt értéket úgy kapja meg, hogy az objektumhoz hasonló típusú öntéssel, azaz „j” egész számra utal.

Az Unboxing több memóriát és több időt is fogyaszt. Mivel, amikor egy objektum típusát nem kell csomagolni, akkor a halomban tárolt objektumtípus értékét át kell vinni a veremben tárolt új értéktípusra. Az a objektumtípus, amelynek értékét a lekérdezték, most a szemétgyűjtésre lesz elérhető.

A Boxing és az Unboxing közötti különbségek

  1. Az ökölvívás során egy objektum értéktípusként jelenik meg. Másrészt az érték visszaállítása a dobozos objektumból az unboxing.
  2. A veremben tárolt értéktípus a halom memóriájában tárolt objektumra kerül. Másrészről az unboxolás során a halom memóriában tárolt objektumot a verem memóriában tárolt értéktípusra másolják.
  3. A boksz implicit átalakítás, míg az unboxing kifejezett konverzió.

Következtetés:

Mind az ökölvívás, mind az unboxing több időt és memóriát fogyaszt, és számítási szempontból drága. Hiányoznak a típusbiztonság, és növelik a futási időt. Mindig tanácsos elkerülni, hogy a programban a boksz és az unboxing túl sok legyen.

Top