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.
OK danke so sehr –