A boksz és a doboz közötti különbség a C # -ben
Tartalom
A C # esetében az összes értéktípus az osztályobjektumból származik. Tehát egy objektum típusú referenciaváltozó bármilyen más értéktípusra hivatkozhat. A C # két módszert vezet be a Boxing and Unboxing kategóriába, amelyek az értéktípust a referencia típushoz kapcsolják. Az alapvető különbség a Boxing és a Unboxing között az, hogy a Boxing az értéktípus átalakítása objektumtípussá, míg más kezekben a Unboxing kifejezés az objektumtípus átalakítását értéktípusra utalja. Vizsgáljuk meg a boksz és a doboz közötti további különbségeket.
- Összehasonlító táblázat
- Meghatározás
- Főbb különbségek
- Következtetés
Összehasonlító táblázat
Az összehasonlítás alapja | dobozolás | Kicsomagolás |
---|---|---|
Alapvető | Az objektumtípus az érték típusára utal. | az érték kinyerésének folyamata a dobozban lévő objektumról. |
Tárolás | A veremben tárolt értéket a halom memóriában tárolt objektumra másolja. | A halom memóriában tárolt objektum értéket a veremben tárolt érték típusra másolja. |
Átalakítás | Implicit átalakulás. | Kifejezett átalakítás. |
Példa | int n = 24; objektum ob = n; | int m = (int) ob; |
A boksz meghatározása
A Boxing az értéktípus objektumtá konvertálására szolgáló eljárás. Itt az érték típusa a veremben tárolódik, az objektum típusa pedig a halom memóriában. Az érték típusának ez az objektumtípus-átalakítása implicit konverzió. Közvetlenül értéket rendelhet egy objektumhoz, és a C # kezeli a többi konverziót. Megértjük a Boxot egy példával.
int i = 24; ob = i objektum; // Jelölje be az n egész számot az ob objektumtípusba. vagy ob1 = 21 tárgy; // itt az ob1 objektumtípus egész számtípusra is utal
A fenti kódban a 24. értéket tartalmazó i típusú egész szám a veremben tárolódik, és az ob objektumtípusba másolódik. Az objektumtípus egy egész számra utal. Most az „int i” tartalmaz továbbá a 24. értéket és az „ob típusú objektum” is a 24. értéket, de mindkét érték független egymástól, azaz ha megváltoztatja az i értékét, akkor az nem tükrözi a ob értéke
A boksz extra memóriát és időt igényel. Ennek oka az, hogy egy új objektumnak, amely az értéktípusra utal, el kell osztania a memóriaterületet a halomon. Ezután a veremben tárolt értéktípus értéke átkerül az objektumtípusba, a halom memória helyén.
A dobozolás meghatározása
A boksz hátulja a dobozolás. A doboz megszüntetése az objektumtípus konvertálása az érték típusba. A Unboxing szakaszban a dobozban tárolt dobozos objektumtípus értéke a halomban tárolt értéktípusra kerül. A Boxingtól eltérően, a Boxolást kifejezetten kell végrehajtani. Az objektumtípust kifejezetten az érték típusához adják, és az érték típusának meg kell egyeznie azzal az értékkel, amelyre az objektumtípus hivatkozik. Megértsük egy példa a Unboxing fogalmát.
int i = 24; ob = i objektum; // Jelölje be az n egész számot az ob objektumtípusba. int j = (int) ob; // Nyissa ki az ob objektumtípusban tárolt egész értéket az y egész típusra.
Az ob objektumban tárolt értéket úgy lehet letölteni, hogy ugyanahhoz a típusba öntik, mint amelyre az objektum utalt, azaz az „j” egész számtípusra.
A doboz eltávolítása több memóriát és több időt igényel. Mióta, amikor egy objektumtípust nem kell dobozba tenni, akkor a halomban tárolt objektumtípus értékét át kell helyezni a veremben tárolt új értéktípusra. Az a objektumtípus, amelynek a visszakeresett értéke mostantól elérhető lesz a szemétgyűjtéshez.
- A boxban az objektumot értéktípusként hivatkozni kell. Másrészt az érték visszakerülését a dobozos objektumból az unboxolásnak nevezzük.
- A veremben tárolt értéktípus átmásolódik a halom memóriában tárolt objektumra. Másrészt, a dobozok eltávolításakor a halommemóriában tárolt objektumot a veremmemóriában tárolt értéktípusra másolják.
- A boksz implicit átalakítás, míg a dobozolás explicit konverzió.
Következtetés:
Mind a boksz, mind a dobozolás több időt és memóriát igényel, és számítási szempontból drágák. Hiányzik a típusbiztonság és növeli a futási időt. Mindig javasoljuk, hogy kerülje a boksz és a doboz túlzott használatát a programban.