Anbefalet, 2024

Redaktørens Valg

Forskel mellem boksning og unboxing i C #

I C # er alle værdityper afledt af klasseobjektet. Så en referencevariabel af typen objekt kan referere til enhver anden værdi type. C # introducerer to metoder til boksning og unboxing, som forbinder værdi type til referencetype. Den grundlæggende forskel mellem boksning og unboxing er, at boksning er konverteringen af ​​værditype til en objekttype, mens udtrykket Unboxing på andre hænder refererer til omdannelsen af ​​objekttypen til værditypen. Lad os studere de øvrige forskelle mellem bokse og unboxing.

Sammenligningstabel

Grundlag for sammenligningBoksningUnboxing
GrundlæggendeObjekttype refererer til værditypen.proces med at hente værdi fra den boksede genstand.
OpbevaringDen værdi, der er gemt på stakken, kopieres til objektet, der er gemt på hukommelse.Objektets værdi, der er gemt på heaphukommelsen, kopieres til værditypen, der er gemt på stakken.
KonverteringImplicit konvertering.Eksplicit konvertering.
Eksempelint n = 24;
objekt ob = n;
int m = (int) ob;

Definition af boksning

Boksning er en procedure til at konvertere en værdi type til en objekttype. Her gemmes værditypen på stakken, og objekttypen er gemt i heaphukommelsen. Denne konvertering af værdi type til objekttypen er en implicit konvertering. Du kan direkte tildele en værdi til et objekt, og C # vil håndtere resten konvertering. Lad os forstå boksning med et eksempel.

 int i = 24; objekt ob = i; // Indsæt heltalstypen n i objekttype ob. eller objekt ob1 = 21; // her henviser også en objekttype ob1 til en heltalstype 

I ovenfor kode lagres heltalstypen I indeholdende værdi 24 på stakken og kopieres til objekttypen ob. En objekttype henviser nu til et helt tal. Nu indeholder "int i" også værdi 24 og "objekttype ob" indeholder også værdi 24, men begge værdier er uafhængige af hinanden, dvs. hvis du ændrer værdien af ​​jeg, afspejler den ikke ændringen i værdi af ob.

Boksning forbruger ekstra hukommelse sammen med ekstra tid. Årsagen er, at et nyt objekt, der vil henvise til værditypen, skal allokere hukommelsespladsen på bunken. Derefter overføres værdien af ​​den værditype, der er gemt på stakken, til ob-typen, på hukommelseshukommelsesstedet.

Definition af Unboxing

Bagsiden af ​​boksning er Unboxing. Unboxing er en konvertering af objekttype til værditype. I Unboxing overføres værdien af ​​den boksede objekttype, der er gemt på bunken, til værditypen, der er gemt på stakken. I modsætning til boksning skal Unboxing udføres eksplicit. Objekttypen udtrykkes udtrykkeligt til værditypen, og værditypen skal være den samme som den værdi, objekttypen refererer til. Lad os forstå begrebet Unboxing med et eksempel.

 int i = 24; objekt ob = i; // Indsæt heltalstypen n i objekttype ob. int j = (int) ob; // Unbox integerværdien gemt i objekttype ob til heltalstype y. 

Den værdi, der er gemt i objektet ob, hentes ved at caste den til den samme type som objektet refererede til dvs. heltalstype "j".

Unboxing bruger også mere hukommelse og mere tid. Da en værdi for objekttype, der er gemt på bunken, skal overføres til den nye værditype, der er gemt på stakken, når en objekttype skal unboxes. Objekttypen, hvis værdi, der er hentet, vil være tilgængelig for affaldsindsamling.

Nøgleforskelle mellem boksning og unboxing

  1. I boksning laves en genstand, der refererer til som en værdi type. På den anden side kaldes processen for at hente værdien tilbage fra den boksede genstand unboxing.
  2. En værditype, der er gemt på en stak, kopieres til objektet, der er gemt på bunthukommelse. På den anden side kopieres en genstand, der er gemt på bunthukommelse, til en værditype, der er gemt på stakhukommelse, ved unboxing.
  3. Boksning er en implicit konvertering, mens unboxing er en eksplicit konvertering.

Konklusion:

Både boxning og unboxing spiser mere tid og hukommelse, og de er beregningsdygtige. De mangler også type sikkerhed og øger runtime overhead. Det anbefales altid at undgå for meget brug af boksning og unboxing i programmet.

Top