2012-04-01 6 views
-4

Wenn ichBoxen und Unboxing Konzept

int i=100; 

schreiben dann ist es als int im Speicher unter 4 Bytes oder gespeichert, wie object, und zu der Zeit gespeichert werde es verwendet Retrieval Unboxing Konzept ist (int von Objektklasse extrahiert Typ Objekt).

Antwort

3

Nein, es gibt keine Boxen gehen in Ihrem Beispiel die Int dauert nur 4 Bytes. Boxing tritt nur auf, wenn ein Werttyp in einer Variablen object manuell gespeichert wird.

int i = 100;  // No boxing 
i = i + 1;  // No boxing 
object o = i;  // Boxing 
int j = (int)o; // Unboxing 
+0

OK danke so sehr –

0

Der einfachste Weg, Boxen zu verstehen, ist es, einige Details, wie Werttypen und Referenztypen in dem CLI/CLR (die Schicht des Rahmens, der die Ausgabe von einer C# oder anderem .net-Compiler ausführt) behandelt werden, zu verstehen. Insbesondere muss man erkennen, dass das Framework für jeden Werttyp auch einen entsprechenden versiegelten Referenztyp definiert, der von der Klasse System.ValueType stammt (die wiederum von System.Object erbt) und dieselben öffentlichen und privaten Felder wie der ursprüngliche Werttyp (*) hat. . Lagerorte vom Werttyp immer halten Werttypen, während die Lagerorte der Referenztypen immer Referenztypen enthalten. Keine Ausnahmen. Wenn versucht wird, einen Werttyp in einer Situation zu verwenden, die einen Referenztyp erfordert, erstellt das System eine neue Instanz des Referenztyps, der diesem Werttyp entspricht, kopiert die öffentlichen und privaten Felder aus dem Wert, der gespeichert werden soll, und Verwenden Sie dann diese neue Instanz. Dies wird "Boxen" genannt.

Beachten Sie, dass während C# vorgibt, dass alle Werttypen von System.Object erben, eine solche Aussage auf einer losen Definition von "Vererbung" beruht, die verwirrender als nützlich sein kann. Wenn man die Anweisung definiert „X erbt Y“ bedeutet „Instanzen von X kann implizit als Instanzen Y verwendet werden“, dann unboxed Werttypen tun nicht erben Object, aber ihre Werte können in Fällen von boxed Werttypen kopiert werden, die machen.