Sobes.tech
Middle

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.