Verschil tussen boksen en Unboxing in C #

Schrijver: Laura McKinney
Datum Van Creatie: 2 April 2021
Updatedatum: 5 Kunnen 2024
Anonim
Top 4 Dying Programming Languages of 2019 | by Clever Programmer
Video: Top 4 Dying Programming Languages of 2019 | by Clever Programmer

Inhoud


In C # worden alle waardetypen afgeleid van het klasseobject. Een referentievariabele van het type object kan dus verwijzen naar elk ander waardetype. C # introduceert twee methoden voor Boksen en Unboxing, waarbij het waardetype wordt gekoppeld aan het referentietype. Het basisverschil tussen boksen en Unboxing is dat boksen de conversie is van het waardetype naar een objecttype, terwijl de term Unboxing daarentegen verwijst naar de conversie van het objecttype naar het waardetype. Laten we de andere verschillen tussen boksen en Unboxing bestuderen.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingBoksenunboxing
basis-Objecttype verwijst naar het waardetype.proces voor het ophalen van waarde uit het boxed object.
opslagruimteDe waarde die op de stapel is opgeslagen, wordt gekopieerd naar het object dat in het heapgeheugen is opgeslagen.De objectenwaarde die is opgeslagen in het heapgeheugen wordt gekopieerd naar het waardetype dat op de stapel is opgeslagen.
conversieImpliciete conversie.Expliciete conversie.
Voorbeeldint n = 24;
object ob = n;
int m = (int) ob;


Definitie van boksen

Boksen is een procedure voor het converteren van een waardetype naar een objecttype. Hier wordt het waardetype opgeslagen op de stapel en wordt het objecttype opgeslagen in het heapgeheugen. Deze conversie van waardetype naar het objecttype is een impliciete conversie. U kunt direct een waarde aan een object toewijzen en C # zorgt voor de restconversie. Laten we boksen begrijpen met een voorbeeld.

int i = 24; object ob = i; // Plaats het gehele getal n in het objecttype ob. of object ob1 = 21; // hier verwijst ook een objecttype ob1 naar een geheel getal

In bovenstaande code wordt het gehele getal type i met waarde 24 opgeslagen op de stapel en gekopieerd naar het objecttype ob. Een objecttype verwijst nu naar een geheel getal. Nu bevatten de "int i" ook waarde 24 en het "objecttype ob" bevatten ook waarde 24, maar beide waarden zijn onafhankelijk van elkaar, dwz als u de waarde van i wijzigt, weerspiegelt dit niet de verandering in de waarde van ob.


Boksen verbruikt extra geheugen samen met extra tijd. De reden is dat een nieuw object, dat naar het waardetype verwijst, de geheugenruimte op de heap moet toewijzen. Vervolgens wordt de waarde van het waardetype dat op de stapel is opgeslagen, overgedragen naar het objecttype, op de heap-geheugenlocatie.

Definitie van Unboxing

Het omgekeerde van Boxing is Unboxing. Unboxing is een conversie van het objecttype naar het waardetype. In Unboxing wordt de waarde van het in de box opgeslagen objecttype overgebracht naar het waardetype dat op de stapel is opgeslagen. In tegenstelling tot Boxing, moet Unboxing expliciet worden gedaan. Het objecttype wordt expliciet naar het waardetype gegoten en het waardetype moet hetzelfde zijn als de waarde waarnaar het objecttype verwijst. Laten we het concept van Unboxing begrijpen met een voorbeeld.

int i = 24; object ob = i; // Plaats het gehele getal n in het objecttype ob. int j = (int) ob; // Deselecteer de integerwaarde die is opgeslagen in objecttype ob naar integertype y.

De waarde die is opgeslagen in het object ob wordt opgehaald door deze naar het type te casten waarnaar het object verwijst, d.w.z. het gehele getal "j".

Unboxing kost ook meer geheugen en meer tijd. Omdat, wanneer een objecttype moet worden uitgepakt, de waarde van het objecttype dat op de heap is opgeslagen, moet worden overgedragen naar het nieuwe waardetype dat op de stapel is opgeslagen. Het objecttype waarvan de waarde die is opgehaald, nu beschikbaar is voor garbage collection.

  1. In boksen wordt een object gemaakt om te verwijzen als een waardetype. Aan de andere kant wordt het proces van het terughalen van de waarde uit het omkaderde object unboxing genoemd.
  2. Een waardetype dat is opgeslagen op een stapel wordt gekopieerd naar het object dat is opgeslagen in het heapgeheugen. Anderzijds wordt bij unboxing een object dat is opgeslagen in het heapgeheugen gekopieerd naar een waardetype dat is opgeslagen in het stapelgeheugen.
  3. Boksen is een impliciete conversie, terwijl unboxing een expliciete conversie is.

Gevolgtrekking:

Zowel het boksen als het uitpakken kost meer tijd en geheugen, en ze zijn rekenkundig duur. Ze missen ook type veiligheid en verhogen de looptijd boven het hoofd. Het wordt altijd geadviseerd om te veel gebruik van boksen en unboxing in het programma te vermijden.