Inhaltsverzeichnis
Viertens die Verbindung zwischen den beiden
1. Konzept
Werttyp: Speichern Sie den Wert direkt, speichern Sie seinen Wert auf dem Stapel
Anwendungstyp: Speichern Sie einen Verweis auf seinen Wert, speichern Sie eine Adresse auf dem Stapel, speichern Sie einen Wert auf dem Heap
Zwei, Datentyp
3. Vergleich der beiden
|
Werttyp |
Referenztyp |
Quelle |
Von System.ValueType geerbt |
Von System.Object geerbt |
benutzen |
Repräsentiert die tatsächlichen Daten |
Stellt einen Zeiger oder Verweis auf Daten dar, die im Speicherheap gespeichert sind |
Datenspeicherort |
Im Speicherstapel gespeichert |
Wird im Speicherhaufen gespeichert, und nur die Adresse des Objekts im Haufen wird in der Speichereinheit gespeichert |
Variabler Speichertyp |
Speichern Sie die tatsächlichen Daten direkt |
Die Adresse, an der die Daten gespeichert sind, dh die Referenz des Objekts |
Sicherer Ort |
Die Variable speichert direkt den Wert der Variablen im Stapel |
Variablen speichern die Adresse der tatsächlichen Daten im Stapel und die tatsächlichen Daten im Heap |
Erbe |
Versiegelt, kann nicht als andere Art von Basisklasse, Einzelvererbung oder Mehrfachvererbungsschnittstelle verwendet werden |
Im Allgemeinen vererbt |
Variable |
Kann nicht Null sein, der Werttyp wird automatisch auf den Wert 0 initialisiert |
Standardmäßig wird es als Nullwert erstellt. Dies bedeutet, dass es auf die Referenzadresse eines verwalteten Heaps verweist. Operationen an einem Referenztyp mit dem Wert Null lösen eine NullReferenceException-Ausnahme aus |
Viertens die Verbindung zwischen den beiden
Werttypen und Referenztypen können ineinander konvertiert werden, dh Box- und Unboxing-Vorgänge:
Boxing tritt auf, wenn ein Werttyp in einen Referenztyp konvertiert wird und ein Datenelement (Kopie) automatisch vom Stapel auf den Heap kopiert wird.
int i = 8;
object o = i; // 装箱 // 首先在堆中开辟出一片区域,再将 i 的一个副本放在该区域中。
// 所有引用都必须引用堆上的对象
Unboxing tritt auf, wenn ein Referenztyp in einen Werttyp konvertiert wird und ein Datenelement (Kopie) automatisch vom Heap auf den Stapel kopiert wird.
int i = 8;
object o = i; // 装箱
i = (int)o; // 拆箱 // 此处使用强制类型转换(cast)
Ergänzung:
Verwalteter Heap: Dies ist die Grundlage für die automatische Speicherverwaltung in CLR (Common Language Database). Wenn ein neuer Prozess initialisiert wird, wird zur Laufzeit ein zusammenhängender Adressraumbereich für den Prozess reserviert. Dieser reservierte Adressraum wird als verwalteter Heap bezeichnet.