Sobes.tech
Middle

Kas yra boxing ir unboxing C# kalboje ir kaip galima išvengti šių procesų?

sobes.tech AI

Atsakymas iš AI

Boxing (kapsuliavimas) — tai neapibrėžtas reikšmės tipo konvertavimas į nuorodos tipą object arba bet kurį kitą iš object kilusį nuorodos tipą. Šiuo procesu reikšmė yra įdedama į naują atminties sritį valdomame krūvoje.

Unboxing (išpakavimas) — tai aiškus konvertavimas iš object nuorodos tipo į reikšmės tipą. Pirmiausia tikrinama, ar objektas yra norimo reikšmės tipo pavyzdys, tada jo duomenų laukas kopijuojamas iš krūvos.

Pavyzdžiai:

// Kapsuliavimas (boxing)
int reikšmėsTipas = 10;
object nuorodaTipas = reikšmėsTipas; // reikšmėsTipas įpaketuojamas į `object`

// Išpakavimas (unboxing)
int išpakotasReikšmė = (int)nuorodaTipas; // nuorodaTipas išpakavamas į int

Kapsuliavimą ir išpakavimą galima išvengti naudojant generikus. Generiniai sąrašai ir metodai dirba tiesiogiai su reikšmės tipais, nereikalaujant jų konvertavimo į object. Tai pagerina našumą ir tipų saugumą.

Pavyzdys su generikais:

// Naudojant List<T> vietoj ArrayList
using System.Collections.Generic;

List<int> generinisSarasas = new List<int>();
generinisSarasas.Add(10); // Be kapsuliavimo

int reikšmė = generinisSarasas[0]; // Be išpakavimo

Generikų naudojimas užkerta kelią atminties paskirstymo ir duomenų kopijavimo išlaidoms kapsuliavimo/išpakavimo metu, taip pat išvengia tipų klaidų vykdymo metu.