Empfohlen, 2021

Tipp Der Redaktion

Unterschied zwischen Boxen und Unboxing in C #

In C # werden alle Werttypen vom Klassenobjekt abgeleitet. Eine Referenzvariable vom Typ object kann sich also auf jeden anderen Werttyp beziehen. C # führt zwei Methoden für Boxing und Unboxing ein, die den Werttyp mit dem Referenztyp verknüpfen. Der grundlegende Unterschied zwischen Boxing und Unboxing besteht darin, dass Boxing die Konvertierung des Wertetyps in einen Objekttyp ist, wohingegen sich der Begriff Unboxing auf die Konvertierung des Objekttyps in den Werttyp bezieht. Lassen Sie uns die anderen Unterschiede zwischen Boxen und Unboxing untersuchen.

Vergleichstabelle

VergleichsgrundlageBoxenUnboxing
BasicObjekttyp bezieht sich auf den Werttyp.Prozess zum Abrufen des Werts aus dem geschachtelten Objekt.
LagerDer im Stapel gespeicherte Wert wird in das im Heap-Speicher gespeicherte Objekt kopiert.Der im Heap-Speicher gespeicherte Wert des Objekts wird in den Wertetyp kopiert, der im Stapel gespeichert ist.
UmwandlungImplizite KonvertierungExplizite Konvertierung
Beispielint n = 24;
Objekt ob = n;
int m = (int) ob;

Definition von Boxen

Boxen ist eine Prozedur zum Konvertieren eines Werttyps in einen Objekttyp. Hier wird der Werttyp im Stapel und der Objekttyp im Heap-Speicher gespeichert. Diese Konvertierung des Werttyps in den Objekttyp ist eine implizite Konvertierung. Sie können einem Objekt direkt einen Wert zuweisen, und C # übernimmt die Restkonvertierung. Verstehen wir Boxen mit einem Beispiel.

 int i = 24; Objekt ob = i; // Box den Integer-Typ n in den Objekttyp ob. oder Objekt ob1 = 21; // Auch hier bezieht sich ein Objekttyp ob1 auf einen Integer-Typ 

Im obigen Code wird der Integer-Typ i, der den Wert 24 enthält, auf dem Stack gespeichert und in den Objekttyp ob kopiert. Ein Objekttyp bezieht sich jetzt auf einen ganzzahligen Wert. Das "int i" enthält jetzt auch den Wert 24 und der "Objekttyp ob" enthält auch den Wert 24, aber beide Werte sind unabhängig voneinander, dh wenn Sie den Wert von i ändern, wird die Änderung im Wert nicht angezeigt Wert von ob.

Boxen verbraucht zusätzlichen Speicherplatz und zusätzliche Zeit. Der Grund ist, dass ein neues Objekt, das sich auf den Werttyp bezieht, den Speicherplatz auf dem Heap reservieren muss. Als Nächstes wird der Wert des Wertetyps, der im Stapel gespeichert ist, an den Objekttyp an der Speicherstelle des Heapspeichers übertragen.

Definition von Unboxing

Die Umkehrung von Boxen ist Unboxing. Unboxing ist eine Konvertierung des Objekttyps in den Werttyp. In Unboxing wird der im Heap gespeicherte Wert des Boxed-Objekttyps an den im Stack gespeicherten Werttyp übertragen. Im Gegensatz zum Boxen muss das Unboxing explizit erfolgen. Der Objekttyp wird explizit in den Werttyp umgewandelt, und der Werttyp muss dem Wert entsprechen, auf den sich der Objekttyp bezieht. Verstehen wir das Konzept des Unboxing mit einem Beispiel.

 int i = 24; Objekt ob = i; // Box den Integer-Typ n in den Objekttyp ob. int j = (int) ob; // Deaktivieren Sie den im Objekttyp ob gespeicherten Integer-Wert in den Integer-Typ y. 

Der im Objekt ob gespeicherte Wert wird abgerufen, indem er in den Typ umgewandelt wird, auf den sich das Objekt bezieht, dh auf den Integer-Typ „j“.

Das Unboxing erfordert auch mehr Speicher und mehr Zeit. Wenn ein Objekttyp entboxt werden muss, muss der Wert des auf dem Heap gespeicherten Objekttyps auf den neuen Wertetyp übertragen werden, der im Stapel gespeichert ist. Der Objekttyp, dessen Wert abgerufen wurde, ist jetzt für die Garbage Collection verfügbar.

Hauptunterschiede zwischen Boxen und Unboxing

  1. Beim Boxen wird ein Objekt als Werttyp bezeichnet. Auf der anderen Seite wird das Abrufen des Werts aus dem geschachtelten Objekt als Unboxing bezeichnet.
  2. Ein auf einem Stapel gespeicherter Werttyp wird in das im Heap-Speicher gespeicherte Objekt kopiert. Andererseits wird beim Unboxing ein im Heap-Speicher gespeichertes Objekt in einen Wertetyp kopiert, der im Stack-Speicher gespeichert ist.
  3. Boxen ist eine implizite Konvertierung, während Unboxing eine explizite Konvertierung ist.

Fazit:

Sowohl das Boxen als auch das Unboxing verbrauchen mehr Zeit und Speicher und sind rechenintensiv. Ihnen fehlt außerdem die Typensicherheit und der Laufzeitaufwand wird erhöht. Es wird immer empfohlen, zu viel Boxing und Unboxing im Programm zu verwenden.

Top