Mi az a boxing és unboxing C#-ban, és hogyan lehet ezeket a folyamatokat elkerülni?
sobes.tech MI
Válasz az MI-től
A boxing (dobozolás) a típusérték implicit átalakítása egy referencia típusba, például object-be vagy bármely más, az object-ből származó referencia típusba. Ebben a folyamatban az érték egy új memória területre kerül a kezelt heap-en.
Az unboxing (kicsomagolás) explicit átalakítás az object típusú referencia típusból érték típusra. Először ellenőrizzük, hogy az objektum példány-e a kívánt érték típusnak, majd a dátum mezőjét másoljuk a heap-ről.
Példák:
// Dobozolás (boxing)
int értékTípus = 10;
object referenciaTípus = értékTípus; // az értékTípus dobozolva van object-be
// Kicsomagolás (unboxing)
int kicsomagoltÉrték = (int)referenciaTípus; // a referenciaTípus ki van csomagolva int-be
A dobozolás és kicsomagolás elkerülése érdekében generikusokat lehet használni. A generikus gyűjtemények és metódusok közvetlenül a érték típusokkal dolgoznak, anélkül, hogy konvertálni kellene őket object-be. Ez javítja a teljesítményt és a típusbiztonságot.
Generikus példával:
// List<T> használata az ArrayList helyett
using System.Collections.Generic;
List<int> generikusLista = new List<int>();
generikusLista.Add(10); // Nincs dobozolás
int érték = generikusLista[0]; // Nincs kicsomagolás
A generikusok használata megelőzi a memóriafoglalással és az adatok másolásával járó költségeket a dobozolás/kicsomagolás során, valamint elkerüli a típushibákat futásidőben.