2016-05-05 13 views
0

Ich bin hier in der Programmierungsterminologie stecken geblieben, was mich verwirrt und ich kann meine Gedanken nicht sammeln, wie man diese paar MSDN-Theorie-Sätze tatsächlich und korrekt aus der Common Type System Seite ausdrückt (schreibt).Common Type System - Strukturen

Würde mir jemand helfen, ich möchte das verstehen! Und wenn jemand so freundlich wäre, etwas Code und Kommentar zu diesem Thema zu schreiben, wäre es fantastisch und lobenswert von Ihnen!

// Dies ist der Text (aus dem „Structures“ Absatz genommen wird): https://msdn.microsoft.com/en-us/library/zcx1eb1e(v=vs.110).aspx#

„Für jeden Werttyp, die Common Language Runtime liefert einen entsprechenden Box-Typen, der eine Klasse Dieser hat denselben Status und dasselbe Verhalten wie der Werttyp Eine Instanz eines Werttyps wird eingerahmt, wenn sie an eine Methode übergeben wird, die einen Parameter vom Typ System.Object akzeptiert Sie ist nicht gebunden (also von einer Instanz konvertiert) einer Klasse zurück zu einer Instanz eines Werttyps), wenn die Steuerung von einem Methodenaufruf zurückkehrt, der einen Werttyp als ByReference -Parameter akzeptiert Some Sprachen erfordern eine spezielle Syntax, wenn der Boxtyp erforderlich ist. Andere verwenden den Boxtyp automatisch, wenn er benötigt wird. Wenn Sie einen Werttyp definieren, definieren Sie sowohl die Box und die unboxed Typ.“

Voraus Danke in den besten Grüßen!

Antwort

0

Ein object und ein Werttyp unterschiedlich gespeichert. Ein object a Zeiger auf Speicher im Heap, der die binäre Darstellung dieses Objekts enthält Der Stack ist Speicher reserviert, um Zeiger und Werttypen zu speichern.So hat eine Funktion keinen Zeiger auf eine integer oder bool.Es ist eine Kopie der tatsächlichen übergeben Wert

Aber wenn Sie eine Methode wie folgt haben:

Diese Methode erwartet ein Objekt, einen Zeiger auf einen Speicherort im Speicher, auch wenn Sie einen Werttyp übergeben. Um dies zu tun, muss das Framework ein Objekt erstellen, das auf dem Heap gespeichert ist und das int enthält, so dass es einen Verweis (Zeiger) auf diesen Wert an die Funktion übergeben kann. Das ist Boxen.

Boxen ist implizit. Sie müssen keine Konvertierungsfunktion aufrufen, um eine int in eine object zu konvertieren.

Unboxing tritt auf, wenn Sie dieses Objekt übernehmen und es als Werttyp umwandeln. Zum Beispiel

object x = 5; //Boxes the value to create an object with a pointer 
var y = (int)x; //Unboxes the value, creating an int on the stack. 

Wenn Sie das Objekt unbox in dem Heap gespeichert und referenziert von x inspiziert und dessen Wert abgerufen. Unboxing ist explizit. Wenn Sie irgendetwas von object in einen Werttyp konvertieren, müssen Sie den Typ angeben, in den Sie es konvertieren.

+0

Ich denke, sie sollten es "pointerizing" und "depointerizing" nennen. Viel klarer. Es gibt keine Boxen. –

+0

Danke! Das war eigentlich über Typcasting, jetzt, da du es mit Code ausgedrückt hast, habe ich es besser verstanden, aber dieser letzte Satz ist für mich noch unklar: "Wenn du einen Werttyp definierst, definierst du sowohl den Boxed- als auch den Unboxed-Typ." - Wie kommt es, dass sowohl der Boxed als auch der Unboxed Typ definiert sind? – CSharp4eto