Unterschied zwischen Boxen und Unboxing in C #

Autor: Laura McKinney
Erstelldatum: 2 April 2021
Aktualisierungsdatum: 5 Kann 2024
Anonim
c# boxing & unboxing in 5 min
Video: c# boxing & unboxing in 5 min

Inhalt


In C # werden alle Werttypen vom Klassenobjekt abgeleitet. Eine Referenzvariable vom Typ Objekt kann also auf jeden anderen Werttyp verweisen. In C # werden zwei Methoden zum Ein- und Auspacken eingeführt, mit denen der Werttyp mit dem Referenztyp verknüpft wird. Der grundlegende Unterschied zwischen Boxing und Unboxing besteht darin, dass beim Boxing der Werttyp in einen Objekttyp konvertiert wird, während sich der Begriff Unboxing auf die Konvertierung des Objekttyps in den Werttyp bezieht. Lassen Sie uns die anderen Unterschiede zwischen Boxen und Unboxing untersuchen.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichBoxenUnboxing
BasicObjekttyp bezieht sich auf den Werttyp.Prozess des Abrufens von Wert aus dem Boxed Object.
LagerDer im Stapel gespeicherte Wert wird in das im Heap-Speicher gespeicherte Objekt kopiert.Der im Heap-Speicher gespeicherte Objektwert wird in den im Stack gespeicherten Wertetyp kopiert.
UmwandlungImplizite Konvertierung.Explizite Konvertierung.
Beispielint n = 24;
Objekt ob = n;
int m = (int) ob;


Definition von Boxen

Beim Boxen wird ein Werttyp in einen Objekttyp konvertiert. Hier wird der Werttyp auf dem Stapel und der Objekttyp im Heap-Speicher gespeichert. Diese Konvertierung des Wertetyps in den Objekttyp ist eine implizite Konvertierung. Sie können einem Objekt direkt einen Wert zuweisen, und C # übernimmt die restliche Konvertierung. Lassen Sie uns das Boxen anhand eines Beispiels verstehen.

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

Im obigen Code wird der ganzzahlige Typ i, der den Wert 24 enthält, auf dem Stapel 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 das "object type 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 in nicht berücksichtigt Wert von ob.


Boxen verbraucht zusätzlichen Speicher zusammen mit zusätzlicher Zeit. Der Grund ist, dass ein neues Objekt, das auf den Werttyp verweist, den Speicherplatz auf dem Heap reservieren muss. Als nächstes wird der Wert des Wertetyps, der auf dem Stapel gespeichert ist, an den Objekttyp auf dem Heap-Speicherort übertragen.

Definition von Unboxing

Das Gegenteil von Boxen ist Unboxing. Unboxing ist eine Konvertierung des Objekttyps in den Werttyp. Beim Unboxing wird der Wert des auf dem Heap gespeicherten Objekttyps in den Werttyp übertragen, der auf dem Stack gespeichert ist. Im Gegensatz zum Boxen muss das Unboxing explizit erfolgen. Der Objekttyp wird explizit in den Werttyp umgewandelt, und der Werttyp muss mit dem Wert übereinstimmen, auf den sich der Objekttyp bezieht. Lassen Sie uns das Konzept des Unboxing anhand eines Beispiels verstehen.

int i = 24; Objekt ob = i; // Boxe den Integer Typ n in den Objekttyp ob. int j = (int) ob; // Entpacke 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, d. H. Der ganzzahlige Typ "j".

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

  1. Beim Boxen wird ein Objekt als Werttyp bezeichnet. Auf der anderen Seite wird der Vorgang des Zurückerlangens des Werts aus dem Objekt mit Box als Unboxing bezeichnet.
  2. Ein auf einem Stapel gespeicherter Wertetyp wird in das im Heap-Speicher gespeicherte Objekt kopiert. Andererseits wird beim Unboxing ein im Heap-Speicher gespeichertes Objekt in einen im Stack-Speicher gespeicherten Wertetyp kopiert.
  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. Sie weisen auch eine mangelnde Typensicherheit auf und erhöhen den Laufzeitaufwand. Es wird immer empfohlen, zu viel Boxing und Unboxing im Programm zu vermeiden.