C # -Werttypen und Referenztypen

Inhaltsverzeichnis

1. Konzept

Zwei, Datentyp

3. Vergleich der beiden

Viertens die Verbindung zwischen den beiden

Ergänzung:


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.

Ich denke du magst

Origin blog.csdn.net/TGB_Tom/article/details/109329224
Empfohlen
Rangfolge