Ein Werttyp ist "zugeordnet", wo er definiert ist.
Was das bedeutet, hängt davon ab, wo Sie sie definieren:
- In einer Klasse/Struktur, als ein Feld in dieser Struktur, die Klasse/Struktur im Speicher vergrößern den Werttyp Wert dort zu passen
- Als lokale Variable in einer Methode, im Stack oder als Register oder als Feld in einer generierten Klasse (bei Verwendung von "closures"), abhängig von Optimierungen
- Als Parameter für eine Methode auf dem Stack oder als Register, abhängig von Optimierungen
Ein Referenztyp ist eine Art Doppelwert. Ein Referenztyp ist im Kern ein Zeiger, und der Zeigerwert folgt den gleichen Regeln für "Zuweisung" wie ein Werttyp, aber sobald Sie einen Wert darin speichern, d. ein Verweis auf ein Objekt, das Objekt befindet sich woanders auf dem Heap.
Mit anderen Worten, die Referenzvariable selbst ist als Werttyp "zugeordnet", aber das Objekt, auf das sie sich bezieht, befindet sich auf dem Heap.
Wenn Sie ein Objekt aus einer Klasse konstruieren, wird auf dem Heap Speicherplatz zugewiesen, um alle Felder dieser Klasse und einige Overhead in diesem Raum anzupassen.
Ich kann mich erinnern, dass Jon Skeet einen Artikel über das Thema hat, ich bin mir sicher, dass er bald mit einer Antwort einspringen wird, also bleibt dran.
und da war er, während ich meine Antwort tippte. –